gpt4 book ai didi

ios - Firebase 身份验证未被调用并返回空用户(Swift)

转载 作者:行者123 更新时间:2023-11-30 12:14:16 25 4
gpt4 key购买 nike

我刚刚开始学习 swift 3,并且有 .NET 背景。我在使用 firebase 和我的应用程序验证用户身份时遇到问题。我试图创建一个通用函数,该函数依次调用另一个 Firebase 函数。



let user = logIn(email: email, password: password)
if user != nil{
self.navigationController?.pushViewController(MainVC(), animated: true)
}

 

func logIn(email: String,password: String) -> Firebase.User? {
var loginUser:Firebase.User?

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
if(error != nil){
print(error!)
return
}


if let firebaseUser = user {
loginUser = firebaseUser
}
}
if let user = loginUser{
return user
}
else {
return nil
}
}

在调试过程中,我发现 Auth.auth().signIn 函数被跳过,并且没有被执行,并且返回 null。但是,当我再次运行该应用程序时,我发现 firebase 验证了我的用户!

最佳答案

问题是 signIn 是异步函数,需要一些时间来执行。这意味着当您调用 logIn 函数时,在 signIn 能够让您登录之前,您的 else { return nil} 会执行,并且返回值为 nil。

你不应该从这个函数返回,你应该做的是使用回调:所以用这个替换你的函数头。

func logIn(电子邮件:字符串,密码:字符串,回调:@escaping (Firebase.User?) -> ()) {

删除函数中最后一个 if,因为您不需要它,所有内容都将在 signIn block 中处理。

signIn block 内的代码替换为:

if error != nil {
print(error!)
callback(nil)
}

if let firebaseUser = user {
callback(firebaseUser)
}

现在您必须将调用 logIn 函数的方式更改为:

logIn(email: yourEmail, password: yourPassword) { (firebaseUser: Firebase.User?) in
// Your result is saved in firebaseUser variable
}

整个代码在一起

// CALL LOGIN FUNCTION

logIn(email: yourEmail, password: yourPassword) { (firebaseUser: Firebase.User?) in
// Your result is saved in firebaseUser variable
if firebaseUser != nil{
self.navigationController?.pushViewController(MainVC(), animated: true)
}

}

// LOGIN FUNCTION

func logIn(email: String,password: String, callbacK: @escaping (Firebase.User?) -> ()) {
Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
if error != nil {
print(error!)
callback(nil)
}

callback(firebaseUser)
}
}

我还没有测试过这个,所以也许你需要做一些小的修改,但这是正确的方法。我希望你能明白。

关于ios - Firebase 身份验证未被调用并返回空用户(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com