【问题标题】:Firebase uid returning nil after authentication (Swift)Firebase uid 在身份验证后返回 nil (Swift)
【发布时间】:2016-03-31 01:22:37
【问题描述】:

在我的应用程序中,一旦打开,我就会检查用户是否已经在初始视图的 viewdidload 中进行了身份验证。如果它们已经通过身份验证,我会转到主视图。我什至此时正在将 uid 打印到日志中,并且打印正确。

override func viewDidLoad() {
    super.viewDidLoad()


    if ref.authData != nil {
        let uid = ref.authData.uid
        print(uid)

然后,我稍后在应用程序中执行相同操作,以在用户单击个人资料设置时获取一些用户信息。我编写了完全相同的代码来获取他们的 uid,但这次 uid 返回 nil 并因错误而崩溃

“致命错误:在展开可选值时意外发现 nil”

这是 firebase 还是模拟器问题?

编辑:这个问题只发生过两次。否则,代码本身会按预期工作,这让我想知道这是火力基地还是模拟器问题。

【问题讨论】:

    标签: ios swift firebase uid


    【解决方案1】:

    您想使用observeAuthEventWithBlock 方法,它是一个实时身份验证侦听器。

    override func viewDidAppear() {
      let ref = Firebase(url: "https://<YOUR-FIREBASE-APP>.firebaseio.com")
    
      ref.observeAuthEventWithBlock({ authData in
        if authData != nil {
            // user authenticated
            print(authData)
            self.performSegueWithIdentifier("LoginToOtherView", sender: nil)
        } else {
            // No user is signed in
        }
      })
    }
    

    【讨论】:

    • ref.authData.uid 何时超出范围?即,我们能否澄清一下何时使用 ref.authData.uid 与何时使用 rev.observeAuthEventWithBlock?
    • 通过身份验证后,您可以随时点击ref.authData,它将包含当前用户。您创建的任何参考都是如此。
    • 我很抱歉在这里遗漏了一些东西,但我也检查了 ref.authData != nil 所以我想确保我做得正确。在这种情况下,OP 已验证用户已通过身份验证,稍后在同一会话中,该值为 nil。为什么要使用 observeAuthEventWithBlock 代替 ref.authData.uid ,因为正如您提到的 ref.authData 始终有效?
    【解决方案2】:

    关于您遇到的确切错误我不确定,但是一种更快捷的方式来执行您的代码(并避免您的错误)是调用:

    if let uid = ref.authData.uid {
        print(uid)
    }
    

    此代码安全地解开 authData 和 UID。

    【讨论】:

    • 太好了,谢谢,我是新人,所以我一直在寻找更快捷的做事方式。如果我按照上述方式进行操作,我可以摆脱 if ref.authData != nil ?
    • 完全正确 - if let 部分尝试解开(检查它不是 nil)表达式的每个部分。如果失败,它会停止并且您的程序继续执行,而不执行if 中的部分。
    • 太棒了,谢谢!抱歉,我不认为我可以支持你的答案
    【解决方案3】:

    我遇到了这个问题,我花了几个小时。然后我意识到我只是忘记了这样做:

    ref = FIRDatabase.database().reference()
    

    之前

    var ref: FIRDatabaseReference!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2019-12-31
      • 2018-04-08
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多