重新验证用户凭据Swift

sBo*_*rne 12 authentication ios firebase swift firebase-authentication

我希望在允许用户更改其登录信息之前重新验证用户.但是,由于最近的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
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何处理FIRAuthCredential类型的凭证变量,以便重新验证用户身份.可以在此处找到此类的文档.

ado*_*srs 25

获取FIRAuthCredential对象取决于您要用于重新进行身份验证的提供程序.

电子邮件:

let credential = FIREmailPasswordAuthProvider.credentialWithEmail(email, password: password)
Run Code Online (Sandbox Code Playgroud)

Facebook的:

let credential = FIRFacebookAuthProvider.credentialWithAccessToken(FBSDKAccessToken.currentAccessToken().tokenString)
Run Code Online (Sandbox Code Playgroud)

推特:

let credential = FIRTwitterAuthProvider.credentialWithToken(session.authToken, secret: session.authTokenSecret)
Run Code Online (Sandbox Code Playgroud)

谷歌:

let authentication = user.authentication
let credential = FIRGoogleAuthProvider.credentialWithIDToken(authentication.idToken, accessToken: authentication.accessToken)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,截至 2020 年,它略有更新为:`var credential = EmailAuthProvider.credential(withEmail: email,password:password)` (5认同)

Hix*_*eld 5

在Swift 4和最新的firebase 4中,名称有所更改,但原理仍然存在。为了您的方便:

    let eMail = EmailAuthProvider.credential(withEmail: "some@email.com", 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
        ...
    })
Run Code Online (Sandbox Code Playgroud)