【问题标题】:iOS firebase auth current user get nil when restart app重新启动应用程序时,iOS firebase auth 当前用户为零
【发布时间】:2021-11-11 01:18:52
【问题描述】:
Auth.auth().signIn(withEmail:

就我而言,当我第一次打开应用程序并像上面的代码一样登录 firebase 帐户时 然后我重新打开应用程序

let user = Auth.auth().currentUser

user 不是 nil,然后我重新打开 app get currentUser 用户是 nil,这意味着我没有登录

我有其他应用程序这样做,但用户总是不为零。

我想知道为什么会这样。

【问题讨论】:

    标签: ios swift iphone firebase-authentication


    【解决方案1】:

    当应用重新启动时,Firebase 会自动恢复经过身份验证的用户。但这需要调用服务器,这可能需要一些时间。如果您在检查仍在进行时检查Auth.auth().currentUser,您将得到nil 作为结果。

    为确保在完成初始检查后获得值,请使用身份验证状态侦听器,如 getting the current user 文档中的第一个 sn-p 所示。从那里:

    Auth.auth().addStateDidChangeListener { auth, user in
      // ...
    }
    

    一旦这个监听器第一次触发:

    • 如果可以恢复用户身份验证状态,user 变量将有一个值,
    • 或者是nil,如果用户上次运行应用程序时没有登录,或者无法恢复身份验证状态(例如,因为帐户被禁用,或者密码被更改)。李>

    【讨论】:

    • 谢谢你的回复,我添加监听用户为nil,是不是其他原因导致无法恢复认证状态??
    • 如果您启动 firebase 身份验证,则需要一秒钟才能获取用户。您正在处理所谓的竞争条件。只需等待用户在应用启动时登录即可 - 这通常通过 onAuthStateChanged 侦听器完成
    • 您能否编辑您的问题以(也)显示您使用像我的答案中那样的侦听器的代码?如果用户仍然在那里以nil 的身份触发,那么Firebase 确实很可能无法恢复凭据。不过这种情况并不常见,通常 SDK 会记录无法恢复凭据的原因。
    【解决方案2】:

    我认为您很可能在另一台设备上登录或在不同的配置文件中登录并且不知道,您可能有一些同步问题或安全问题,在您解决安全问题之前进行了安全测量

    【讨论】:

    • 感谢您的回复,这似乎很有道理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多