繁体   English   中英

检查用户是否存在于 Firebase 中不起作用 - Swift

[英]Checking if User Exists in Firebase doesn't Work - Swift

我在我的 Swift/iOS 项目中使用 Firebase,并尝试执行检查以确定用户在登录/登录用户流程中时数据库中是否已经存在。

这就是我目前用来检查用户是否存在的方法……无论如何,即使我可以直观地验证用户是否在我的数据库中,我也总是得到用户不存在的结果。

if let user = Auth.auth().currentUser {
    let ref = self.ref.child("users").child(user.uid)
    ref.observeSingleEvent(of: .value, with: { snapshot in
        self.performSegue(withIdentifier: "GoToMainViewController", sender: nil)
     })

} else {
    self.performSegue(withIdentifier: "GoToProfileCreationViewController", sender: nil)
}

我已经在这里这里的这两个 SO 线程中尝试了接受,但始终得到相同的结果。

编辑:这是我的数据库结构

在此处输入图片说明

EDIT2:这是完整的流程,包括我对登录用户进行身份验证的代码(通过电话号码)。 在我记录用户 ID 的两个地方,我都得到了登录 ID。

Auth.auth().signIn(with: credential) { (authResult, error) in
    if let error = error {
        let alert = UIAlertController(title: nil, message: error.localizedDescription, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel) { actions in
        })
        self.present(alert, animated: true)
        return
    }

    let userID = Auth.auth().currentUser?.uid

    print(userID)

    Auth.auth().addStateDidChangeListener { auth, user in
        if user != nil{
            print("user is not nil")
            //self.performSegue(withIdentifier: "GoToJoinChannelsViewController", sender: self)
        }
        else{
            print("user is nil")
            //self.performSegue(withIdentifier: "GoToProfileCreationViewController", sender: nil)
        }
    }

    print(userID)

    //Check if user exists
    if let user = Auth.auth().currentUser {
        let ref = self.ref.child("users").child(user.uid)
        ref.observeSingleEvent(of: .value, with: { snapshot in
            print(snapshot)
            //self.performSegue(withIdentifier: "GoToJoinChannelsViewController", sender: nil)
        })

    } else {
        //self.performSegue(withIdentifier: "GoToProfileCreationViewController", sender: nil)
    }

这是生成的快照的样子:

Snap (sxQLr6p9meZyQi8p8RPrjVxcUi33) {
    bio = h;
    birthday = "11-Feb-1989";
    firstname = n;
    lastname = n;
}

你将要附加的AUTH状态改变监听器的数据库监听,一旦用户通过验证,以便它只能运行:

Auth.auth().addStateDidChangeListener { auth, user in
  if user != nil {
    let ref = self.ref.child("users").child(user.uid)
    ref.observeSingleEvent(of: .value, with: { snapshot in
      if snapshot.exists() {
        // TODO: a user is signed in and registered, navigate to the next screen for them
        self.performSegue(withIdentifier: "GoToJoinChannelsViewController", sender: nil)
      }
      else {           
        // TODO: a user is signed in and not registered, navigate to the next screen for them
      }
    })
  }
  else{
    self.performSegue(withIdentifier: "GoToProfileCreationViewController", sender: nil)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM