web-dev-qa-db-ja.com

ユーザー資格情報の再認証Swift

ログイン情報の変更を許可する前に、ユーザーを再認証したいと思います。ただし、最近の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の資格情報変数をどう処理するかがわかりません。このクラスのドキュメントは ここ にあります。

13
sBourne

FIRAuthCredentialオブジェクトの取得は、再認証に使用するプロバイダーによって異なります。

Eメール:

let credential = FIREmailPasswordAuthProvider.credentialWithEmail(email, password: password)

フェイスブック:

let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)

ツイッター:

let credential = FIRTwitterAuthProvider.credentialWithToken(session.authToken, secret: session.authTokenSecret)

Google:

let authentication = user.authentication
let credential = FIRGoogleAuthProvider.credentialWithIDToken(authentication.idToken, accessToken: authentication.accessToken)
24
adolfosrs

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
        ...
    })
5
HixField

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              
   }
})
1
temp_