[英]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.