【问题标题】:Firebase authentication swiftuiFirebase 身份验证 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 中,因此我将用户的帐户链接到他们的数据。 stackoverflow 上的旧解决方案不起作用,所以我想重新提出这个问题。

【问题讨论】:

    标签: swift firebase swiftui


    【解决方案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) // 上面是一些执行认证的代码。
    猜你喜欢
    • 2020-03-16
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多