ログイン情報の変更を許可する前に、ユーザーを再認証したいと思います。ただし、最近のFirebaseのアップデートにより、ドキュメントはかなり役に立たないことがわかりました。 このリンク を使用して次のauthenticateUser()関数を作成しました。
func authenticateUser()
{
let user = FIRAuth.auth()?.currentUser
var credential: FIRAuthCredential
//Prompt user to re-enter info
user?.reauthenticateWithCredential(credential, completion: { (error) in
if error != nil
{
self.displayAlertMessage("Error reauthenticating user")
}
else
{
//user reauthenticated successfully
}
})
}
ただし、ユーザーを再認証するために、タイプFIRAuthCredentialの資格情報変数をどう処理するかがわかりません。このクラスのドキュメントは ここ にあります。
FIRAuthCredential
オブジェクトの取得は、再認証に使用するプロバイダーによって異なります。
let credential = FIREmailPasswordAuthProvider.credentialWithEmail(email, password: password)
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
let credential = FIRTwitterAuthProvider.credentialWithToken(session.authToken, secret: session.authTokenSecret)
let authentication = user.authentication
let credential = FIRGoogleAuthProvider.credentialWithIDToken(authentication.idToken, accessToken: authentication.accessToken)
Swift 4および最新のfirebase4では、名前が少し変更されていますが、原則は変わりません。便宜上:
let eMail = EmailAuthProvider.credential(withEmail: "[email protected]", password: "somepassword")
let fb = FacebookAuthProvider.credential(withAccessToken: "xxx")
let g = GoogleAuthProvider.credential(withIDToken: "xxx", accessToken: "xxx")
...
Auth.auth().currentUser?.reauthenticate(with: eMail, completion: {
[weak self]
(error) in
...
})
Firebaseの ドキュメント は現在古くなっています。 reauthenticate
を処理する正しい方法は次のとおりです。
let user = Auth.auth().currentUser
user?.reauthenticate(with: credential, completion: { (result, error) in
if let err = error {
//..read error message
} else {
//.. go on
}
})