gpt4 book ai didi

swift - Firebase Firestore 不更新电子邮件验证状态

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:59 26 4
gpt4 key购买 nike

我有这样的安全规则设置(在 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 发出请求时,我收到一条错误消息,提示用户没有足够的权限访问该数据。

当我将用户注销然后重新登录时,一切正常。

我最初的想法是,也许有一个未刷新的 token ?但这似乎非常令人困惑,因为在尝试向 firestore 发出请求之前,我已经刷新了当前用户。

Auth.auth().currentUser?.reload()

我觉得我错过了什么。

为什么用户在注册后被强制登录,但他们的电子邮件验证状态没有相应更新?

我们必须请求重新认证吗?

如果是这样,强制登录的意义何在?


这让我非常沮丧,因为我不知道应该如何管理我的用户。

登录未经验证的用户是我们应该做的事情吗?这不会导致安全问题,例如用户创建虚假帐户和向您的应用程序发送垃圾邮件。


更新

我读了this non swift response这再次强化了我的怀疑。

我明天要测试这个解决方案,它的快速版本是:

Auth.auth().currentUser?.getIDTokenForcingRefresh(forceRefresh: , completion: )

Docs for the method:

Retrieves the Firebase authentication token, possibly refreshing it if it has expired. Remark

The authentication token will be refreshed (by making a network request) if it has expired, or if forceRefresh is YES.

我猜在我的情况下我必须强制刷新,因为 token 不会过期。

最佳答案

原来上面的update说的token要刷新。

这是我解决问题的方法。

首先我刷新授权 token

Auth.auth().currentUser?.getIDTokenForcingRefresh(true)

如果成功,我会刷新用户。

Auth.auth().currentUser?.reload()

我的问题是我认为重新加载用户会刷新 token ,我没想到事情会不同步。

当我检查电子邮件是否已通过验证时,我得到了 true 但 firestore 数据库需要一个刷新的 token 才能知道电子邮件已通过验证。

关于swift - Firebase Firestore 不更新电子邮件验证状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com