我想在登录成功后切换到新的视图,并且它会保存登录状态,当我关闭应用程序并再次打开它时,无需再次登录。我用联合收割机。图书馆。希望你能帮助我。谢谢
这是我的完整代码。希望你能帮助我
Firebase 会告诉您...您只需询问即可。 这就是你问的方式。
let user = Auth.auth().currentUser
if let user = user {
// User is logged in
}
这些是 FirebaseAuth iOS 文档(了解更多信息)
你应该在你的
LoginViewModel
的 init 中调用它
init() {
let user = Auth.auth().currentUser
if let user = user {
// User is logged in
session = User(uid: user.uid,
email: user.email)
} else {
session = nil
}
}
像这样创建
LoginViewModel
变量 session
@Published
class LoginViewModel: ObservableObject {
...
@Published var session: User?
...
}
在
此处了解
Published
类型
您应该将此块添加到 else 中
signIn()
中的 LoginView
函数中,而不是 session.isLoggedIn.toggle()
。
我还建议删除
isLoggedin
var,你应该查看 user
中的 session
对象来检查它是否为零。
func signIn () {
loading = true
error = false
session.signIn(email: email, password: password) { (result, error) in
self.loading = false
if error != nil {
self.error = true
self.loading = false
} else {
guard let uid = result?.user.uid,
let email = result?.user.email else {
return
}
session.session = User(uid: uid, email: email)
}
}
}
这是我添加的
signUp()
。尽管我建议将其放在单独的页面上。
func signUp (email: String,
password: String,
handler: @escaping AuthDataResultCallback) {
Auth.auth().createUser(withEmail: email, password: password, completion: handler)
}
最后我建议将所有登录逻辑移至 viewModel 而不是视图......这就是 viewModel 存在的原因。
Auth.auth().currentUser
无法可靠地返回匿名用户。