如何检查用户是否需要使用Firebase身份验证重新进行身份验证

Mag*_*nus 6 firebase swift firebase-authentication

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

来自Firebase文档:

D. *_*reg 2

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

我所做的是,UIView如果抛出该错误,则触发 a 要求登录详细信息。由于我使用的是电子邮件和密码,因此这就是我在示例中从用户那里收集的信息。

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)
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

获得登录信息后,我运行此函数来重新验证用户身份。就我而言,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)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

deleteUserView我而言,需要deleteUser()用户点击按钮。您也可以使用UIAlertController它来代替 custom UIView,但这取决于您。

希望这可以帮助。