在swiftUI中获取当前登录的用户Firebase

问题描述 投票:0回答:2

我想在登录成功后切换到新的视图,并且它会保存登录状态,当我关闭应用程序并再次打开它时,无需再次登录。我用联合收割机。图书馆。希望你能帮助我。谢谢

这是我的完整代码。希望你能帮助我

swiftui
2个回答
0
投票

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 存在的原因。


0
投票
自 iOS 17.0 起,

Auth.auth().currentUser
无法可靠地返回匿名用户。

© www.soinside.com 2019 - 2024. All rights reserved.