【问题标题】:How to check if user needs to re-authenticate using Firebase Authentication如何检查用户是否需要使用 Firebase 身份验证重新进行身份验证
【发布时间】:2017-05-15 19:47:34
【问题描述】:

我正在使用 Firebase 将用户登录到我的应用程序,但是当我添加了管理他们帐户的功能时,例如更改他们的电子邮件、密码等。该文档说,如果用户最近没有登录,他们需要重新进行身份验证,但我的问题是:如何检查用户最近是否登录?根据文档,错误将返回FIRAuthErrorCodeCredentialTooOld,但我该如何检查呢?

【问题讨论】:

    标签: swift firebase firebase-authentication


    【解决方案1】:

    斯威夫特 3 我昨天在尝试删除用户时不得不这样做。需要注意的一件事是 FIRAuthErrorCodeCredentialTooOld 现在是 FIRAuthErrorCode.errorCodeRequiresRecentLogin

    我所做的是触发UIView 以在引发该错误时询问登录详细信息。由于我使用的是电子邮件和密码,这就是我在示例中从用户那里收集的信息。

    private func deleteUser() {
      //get the current user
      guard let currentUser = FIRAuth.auth()?.currentUser else { return }
    
      currentUser.delete { (error) in
        if error == nil {
          //currentUser is deleted
        } else {
          //this gets the error code
          guard let errorCode = FIRAuthErrorCode(rawValue: error!._code) else { return }
          if errorCode == FIRAuthErrorCode.errorCodeRequiresRecentLogin {
            //create UIView to get user login information
            let loginView = [yourLoginUIViewController]
            self.present(loginView, animated: true, completion: nil)
          }
        }
    }
    

    获得登录信息后,我运行此函数来重新验证用户。就我而言,如果登录成功,我在上面的代码中运行loginView

    func reauthenticateUserWith(email: String, password: String) {
      FIRAuth.auth()?.signIn(withEmail: email, password: password) { (user, error) in
        if error == nil {
          //display UIView to delete user again
          let deleteUserView = deleteUserView()
          present(deleteUserView, animated: true, completion: nil)
        } else {
          //handle error
          print(error!.localizedDescription)
        }
      }
    }
    

    在我的例子中,deleteUserView 在用户点击按钮时调用deleteUser()。您也可以使用 UIAlertController 代替自定义 UIViews,但这取决于您。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      当前 Swift 5

      的更新
      let user = Auth.auth().currentUser
      
      user?.delete { error in
          if let error = error {
              let authErr = AuthErrorCode(rawValue: error.code)
              if authErr == .requiresRecentLogin {
                  // reauthenticate
              }
      
              // other error
          } else {
              // delete success
          }
      }
      
      

      【讨论】:

      • 谢谢,只需将.code 更改为._code 即可为我工作。
      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 2020-10-13
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      相关资源
      最近更新 更多