Firebase 身份验证 swiftui

Posted

技术标签:

【中文标题】Firebase 身份验证 swiftui【英文标题】:Firebase authentication swiftui 【发布时间】:2021-04-07 21:57:27 【问题描述】:

如何修复这个代码呢。它给出了一个错误,不能推送 2 个调用必须只有一个。出于这个原因,我使用 firebase 身份验证的登录不起作用。我对 firebase 不是很好,不幸的是我没有获取文档。

// sessionStore中的注册码

func signUp(email: String, password: String, completion: @escaping (_ error: Error?) -> Void) 
        Auth.auth().createUser(withEmail: email, password: password)  (result, error) in
        if let error = error 
            print(error.localizedDescription)
         else 
            completion(nil)
            
        
    

//用于登录视图的登录代码 - 特别是放置 * 的地方是我得到的错误必须包含一个变量而不是 2 个变量。

func signIn() 
        session.signIn(email: email, password: password)  **(result, error)** in
            if let error = error 
                self.error = error.localizedDescription
             else 
                return
            
        
    

//登录sessionStore

 func signIn(email: String, password: String, completion:@escaping (_ error: Error?) -> Void) 
            Auth.auth().signIn(withEmail: email, password: password)  (result, error) in
                if let error = error 
                    print(error.localizedDescription)
             else 
                completion(nil)
                
            
        

// 登录代码 登录视图 在视图中也会出现同样的错误

func signUp() 
        session.signUp(email: email, password: password) (result,_ error) in
            if let error = error 
                self.error = error.localizedDescription
             else 
                self.email = ""
                self.password = ""
            
        
    

我想将用户 ID 存储在 Firestore 中,因此我将用户的帐户链接到他们的数据。 *** 上的旧解决方案不起作用,所以我想重新提出这个问题。

【问题讨论】:

【参考方案1】:

sessionStore 中,您的完成处理程序只发回Error?

func signIn(email: String, password: String, completion:@escaping (_ error: Error?) -> Void) 

但是,当您在这里调用 resulterror 时,您会尝试使用它:

session.signIn(email: email, password: password)  (result, error) in

如果您不需要result,最简单的解决方法就是将该行更改为:

session.signIn(email: email, password: password)  (error) in

另外,您目前没有在sessionStore 中发送该错误。添加这个:

func signIn(email: String, password: String, completion:@escaping (_ error: Error?) -> Void) 
            Auth.auth().signIn(withEmail: email, password: password)  (result, error) in
                if let error = error 
                    print(error.localizedDescription)
                    completion(error) //<-- Here
             else 
                completion(nil)
                
            
        

如果您确实在您的视图中需要signIn 函数中的result,您可以修改sessionStore 中的signIn 函数以同样返回结果:

func signIn(email: String, password: String, completion:@escaping (AuthDataResult?,Error?) -> Void) 
  Auth.auth().signIn(withEmail: email, password: password)  (result, error) in
    completion(result, error)              
  

在这种情况下,您可以在视图中保留原来的 (result, error) 代码。

【讨论】:

注册视图中的注册功能怎么样。 您将应用我为signIn 说明的完全相同的原则 一旦用户登录我如何完成它。在登录视图中 还有为什么一旦用户注册,他们就会自动登录。我希望一旦用户注册,字段设置为空,他们必须通过登录才能登录登录后进入内容视图。 Group if (session.session != nil) VStack Text("Welcome back here user!") Button(action:session.signOut) Text("Sign out") else SignInView().environmentObject(SessionStore()) .onAppear(perform: getUser) // 上面是一些执行认证的代码。

以上是关于Firebase 身份验证 swiftui的主要内容,如果未能解决你的问题,请参考以下文章

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

成功登录后 SwiftUI Firebase 身份验证关闭视图

在 SwiftUI 中实现 Firebase 身份验证时,Xcode 13 找不到 FacebookAppID [重复]

将 Firebase 身份验证与新的 @App 协议一起使用

Firebase 更改权限公共访问 SwiftUI

如何针对 Firebase 验证身份验证令牌?