我的安全规则设置如下(在 firestore 控制台中)。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth.uid != null && request.auth.token.email_verified;
allow write: if false;
}
}
}
Firebase 自动登录新用户。
因此,最近的用户将拥有未经验证的电子邮件地址。
当用户验证他们的电子邮件时,我会在我的应用程序中收到这些结果。
Auth.auth().currentUser?.isEmailVerified // This is true
但是,当我向 firestore 发出请求时,我收到一条错误消息,指出用户没有足够的权限来访问该数据。
当我注销用户然后重新登录时,一切正常。
我最初的想法是,也许有一个令牌没有刷新?
但这似乎非常令人困惑,因为在尝试向 firestore 发出请求之前我已经刷新了当前用户。
Auth.auth().currentUser?.reload()
我觉得我失去了一些东西。
为什么用户注册后强制登录,但电子邮件验证状态没有相应更新?
我们必须请求重新验证吗?
如果是这样,强制登录有何意义?
这变得非常令人沮丧,因为我不知道如何管理我的用户。
登录未经验证的用户是我们应该做的事情吗?
这是否会导致安全问题,例如用户创建虚假帐户并向您的应用程序发送垃圾邮件。
Update
I read 这种不迅速的反应这更加坚定了我的怀疑。
我明天将测试这个解决方案,它的快速版本是:
Auth.auth().currentUser?.getIDTokenForcingRefresh(forceRefresh: , completion: )
该方法的文档:
检索 Firebase 身份验证令牌,如果出现以下情况,可能会刷新它
它已经过期了。评论
身份验证令牌将被刷新(通过使网络
请求)如果已过期,或者如果forceRefresh
is YES.
我猜在我的情况下我必须强制刷新,因为令牌不会过期。