我的安全规则是这样设置的(在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()
我觉得我错过了什么。
为什么用户在注册后被强制登录,但他们的电子邮件验证状态却没有相应地更新?
我们需要重新认证吗?
如果是,强制登录的意义是什么?
这让我非常沮丧,因为我不知道该如何管理我的用户。
登录未经验证的用户是我们应该做的事情吗?
这难道不会导致安全问题,如用户伪造帐户和垃圾邮件您的应用程序。
更新
我读
this non swift response
这使我更加怀疑。
我明天要测试这个解决方案,它的swift版本是:
Auth.auth().currentUser?.getIDTokenForcingRefresh(forceRefresh: , completion: )
方法文件:
检索firebase身份验证令牌,如果
它已经过期了。备注
将刷新身份验证令牌(通过建立网络
请求)如果已过期,或者
forceRefresh
是的。
我猜在我的情况下,我必须强制刷新,因为令牌不会过期。