2017-01-01 7 views
4

私はFirebaseを使用して自分のアプリケーションにログインしますが、電子メールやパスワードなどを管理する機能を追加しています。ドキュメントによれば、ユーザーが最近サインインしていない場合、再認証が必要ですが、私の質問は次のとおりです。ユーザーが最近サインインしたかどうかを確認するにはどうすればよいですか?ドキュメントによると、エラーはFIRAuthErrorCodeCredentialTooOldを返しますが、これをどのように確認できますか?Firebase認証を使用して再認証する必要があるかどうかを確認する方法

From the Firebase docs:

答えて

0

スウィフト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()を呼び出します。カスタムUIViewの代わりにUIAlertControllerを使用することもできますが、それはあなた次第です。

これが役に立ちます。

関連する問題