我正在使用Firebase将用户登录到我的应用中,但是当我添加管理其帐户的功能时,例如更改其电子邮件,密码等.文档说如果用户最近没有登录,则需要重新进行身份验证,但我的问题是:如何检查用户是否最近登录过?根据文档,错误将返回FIRAuthErrorCodeCredentialTooOld,但我该如何检查?
解决方法
斯威夫特3
我在昨天尝试删除用户时必须这样做.需要注意的一件事是FIRAuthErrorCodeCredentialTooOld现在是FIRAuthErrorCode.errorCodeRequiresRecentLogin
我在昨天尝试删除用户时必须这样做.需要注意的一件事是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,completion: nil) } else { //handle error print(error!.localizedDescription) } } }
在我的情况下,deleteUserView在用户点按钮上调用deleteUser().您也可以使用UIAlertController代替自定义UIViews,但这取决于您.
希望这可以帮助.