SwiftUI 和 Firebase:当前用户是不是持续存在?

Posted

技术标签:

【中文标题】SwiftUI 和 Firebase:当前用户是不是持续存在?【英文标题】:SwiftUI & Firebase: Does current user persist?SwiftUI 和 Firebase:当前用户是否持续存在? 【发布时间】:2021-10-17 01:40:48 【问题描述】:

我正在构建一个使用 firebase 登录的应用程序,当我检查当前用户时,即使我启动模拟器它也会说有一个当前用户。这是否正确,用户是否坚持?

这里是我检查用户的地方:

var body: some View 
        VStack
            if authManager.signedIn 
                //Create a coordinator instance and inject it into the app
                HomeTabView()
             else 
                InitialView()
            
        
        .onAppear
            print(authManager.signedIn)
            authManager.signedIn = authManager.isSignedIn
            print(authManager.signedIn)
        
    

这是身份验证管理器的代码:

class authentication: ObservableObject 
    //Class that will handle logging in using firebase
    
    let auth = Auth.auth()
    @Published var signedIn: Bool = false
    private var firebaseLoggedIn: Bool = false
    private var localLoggedIn: Bool = false
    //Enabled will be triggered through the settings to allow the user the opportunity to use biometrics to login
    var enabled: Bool = false
    
    var isSignedIn: Bool 
        if auth.currentUser != nil 
            print (auth.currentUser?.email as Any)
        
        return auth.currentUser != nil 
    

【问题讨论】:

是的,用户仍然存在。但是,我建议使用 authStateListener 并替换您的 authManager.signedIn = authManager.isSignedIn,这似乎很脆弱。 谢谢,我会试试的,我发现将模拟器重置为初始设置会清除当前用户的缓存,这样也可以正常工作 【参考方案1】:

Firebase 会自动保留用户凭据,并在应用重新启动时尝试恢复这些凭据。请注意,这需要调用服务器,因此在您的应用启动时可能无法正确完成,因此currentUser可能此时仍为nil

为确保您在用户凭据已恢复(或被服务器拒绝,例如帐户已被禁用时)时收到通知,请务必使用身份验证状态侦听器,如第一个 sn-p 中所示getting the current user 上的文档 n。

【讨论】:

以上是关于SwiftUI 和 Firebase:当前用户是不是持续存在?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 和 Firebase:如何删除用户?

Firestore 和 SwiftUI - 我的快照阅读器是不是不必要地读取数据库?

Firebase SwiftUI 和 Firebase Auth - 不读取用户 ID?

SwiftUI / Firebase:我可以使用@Published 向 Firebase 数据库发送和接收单个值吗?

Firebase 和 swiftUI,监听实时更新奇怪的行为怪异

处理 SwiftUI 组合应用程序中的 Firebase 身份验证错误