【问题标题】:Firebase segue authenticationFirebase segue 身份验证
【发布时间】:2017-02-02 23:11:56
【问题描述】:

目前我正在使用 Firebase 身份验证并处理了许多错误,例如错误的用户名、密码、空字段等,并且一切正常。但是,当我尝试向下一页添加 segue 并使用数据库中不存在的随机电子邮件时,Firebase 身份验证没有给我任何错误,只是将用户传递到下一页。当我删除 segue 并放置随机用户时,它会给我一个错误,找不到这样的用户,这是我试图通过 segue 实现的。请指教,可能是什么问题?

AuthService 文件

func login(email: String, password: String, onComplete: Completion?) {
    FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in
        if error != nil {
            self.handleFirebaseError(error: error! as NSError, onComplete: onComplete)
        } else {
            onComplete?(nil, user)
        }

    })
}

func handleFirebaseError(error: NSError, onComplete: Completion?) {
    print(error.debugDescription)
    if let errorCode = FIRAuthErrorCode(rawValue: error.code) {
        switch (errorCode) {
        case .errorCodeInvalidEmail:
            onComplete?("Invalid email address", nil)
            break
        case .errorCodeWrongPassword:
            onComplete?("Invalid password", nil)
            break
        case .errorCodeUserNotFound:
            onComplete?("Can't find user", nil)
            break
        default:
            onComplete?("There was a problem authentication. Try again", nil)
        }
    }
}

视图控制器

@IBAction func loginBtnTapped(_ sender: Any) {
    if let email = emailField.text, let pass = passwordField.text , (email.characters.count > 0 && pass.characters.count > 0)  {
        AuthService.instance.login(email: email, password: pass, onComplete: { (errMsg, data) in
            guard errMsg == nil else {
                self.alert(title: "Error Authentication", errMsg: errMsg!)
                return
            }
        })
    } else {
        self.alert(title: "Username and password required", errMsg: "You must enter both a username and a password")
    }
}

【问题讨论】:

    标签: ios swift firebase firebase-authentication


    【解决方案1】:

    hybridcattt 是正确的。我将添加一个更具体的答案。使用 segues 时,请确保下一个屏幕不是直接从按钮连接的,否则它会在您点击它时立即触发,而不管您等待的结果如何。

    将您的视图控制器连接到下一个视图控制器,如下所示:

    然后在该转场中添加一个标识符

    最后,当你得到你正在等待的东西(例如成功登录)时,然后执行 performSegue

    【讨论】:

    • 非常感谢!我按照您的指示解决了问题!
    • 不客气。您可能希望选择此作为您问题的答案。 :)
    【解决方案2】:

    如果您在情节提要中创建转场,它会立即触发并打开下一个视图控制器。您拥有的登录代码是异步的,故事板不会等待它。

    如果您配置了 segue,很可能甚至不会调用 loginBtnTapped 方法(尝试在那里添加断点)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-01
      • 2022-12-10
      • 1970-01-01
      • 2016-09-26
      • 2017-11-27
      • 1970-01-01
      • 2017-10-20
      相关资源
      最近更新 更多