与Firebase一起工作了将近半年,从未遇到过此问题。就像创建新用户之前一样使用代码,他会出现在控制台中,当我关闭应用程序时,我可以登录,但使用与往常相同的代码会不断提示我输入密码。在第一个VC中,我有:
if let user = Auth.auth().currentUser {
performSegue(withIdentifier: "authorized", sender: self)
}
这将检查是否存储了身份验证令牌,并执行segue到加载屏幕。但是,这永远不会发生。该代码已运行,但不执行任何操作,编译器无错误,控制台无错误。
编辑1:我还尝试创建新项目,在其中我重写了所有获得相同结果的代码,但是我的其他项目没有任何问题,除此以外,我还能使用firebase进行其他操作,例如访问Firestore存储用户,浏览了所有文档,但找不到任何解决方案。
编辑2:登录代码
if(email.text != "" && password.text != ""){
Auth.auth().signIn(withEmail: email.text!, password: password.text!) { user, error in
if(error == nil && user != nil) {
userID = (Auth.auth().currentUser?.uid)!
print("Signed in as: \(userID)")
self.performSegue(withIdentifier: "load", sender: self)
} else {
print("Error found: \(error?.localizedDescription)")
}
}
}
解决方案:
DispatchQueue.main.async(){
if let user = Auth.auth().currentUser {
userID = (Auth.auth().currentUser?.uid)!
self.performSegue(withIdentifier: "authorized", sender: self)
}
}
已加载异步,因此Firebase将在检查身份验证之前进行配置
答案 0 :(得分:1)
问题可能是您在Firebase正确初始化之前调用了代码。我建议将入口视图控制器的viewDidAppear
用于此类情况。如果您使用的是viewDidLoad
,则Firebase可能尚未加载。