对 Swift 非常陌生,只是遵循一些教程
我有一个
loginViewViewModel
,具有登录用户的功能。
但是,我还想在
uid
之后从 Firebase 获取 .signIn
并打印到控制台。我计划将此 uid
用于其他目的,但想确保我可以首先成功地将其打印到控制台
下面是我的
loginViewViewModel
和登录功能
class LoginViewViewModel: ObservableObject {
@Published var email = ""
@Published var password = ""
init() {}
func login(){
// try to log in
Auth.auth().signIn(withEmail: email, password: password)
// fetch user id
guard let userId = Auth.auth().currentUser?.uid else { return }
print("Logging firebase user \(userId)")
}
}
我构建了我的应用程序,但成功登录后没有任何内容打印到控制台。
我做错了什么?
所以我认为这里的问题是,当您调用
Auth.auth().signIn
时,这是请求 firebase 使用给定的凭据对用户进行身份验证,直到 firebase 发回结果为止 Auth.auth().currentUser
Firebase 文档有这个示例。
Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
guard let strongSelf = self else { return }
// ...
}
如果您将打印语句移至该闭包内(并且提供的凭据正确),那么这应该可以解决您的问题。在此闭包中,您还会获得一个
authResult
和 error
您应该使用它来处理失败的登录等。
总结起来应该是这样的:
Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
guard let self = self else { return }
guard let userId = Auth.auth().currentUser?.uid else { return }
print("Logging firebase user \(userId)")
}