我正在使用Firebase将用户登录到我的应用中,但是当我添加管理其帐户的功能时,例如更改其电子邮件,密码等。文档说如果用户最近没有登录,则需要重新进行身份验证,但我的问题是:如何检查用户是否最近登录过?根据文档,错误将返回FIRAuthErrorCodeCredentialTooOld
,但我该如何检查?
答案 0 :(得分:1)
Swift 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
代替自定义UIView
,但这取决于您。
希望这有帮助。
答案 1 :(得分:1)
更新当前的 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
}
}