重新验证用户凭据 Swift
Posted
技术标签:
【中文标题】重新验证用户凭据 Swift【英文标题】:Re-authenticating User Credentials Swift 【发布时间】:2016-11-10 05:27:31 【问题描述】:我希望在允许用户更改登录信息之前重新对用户进行身份验证。但是,由于最近的 Firebase 更新,我发现文档毫无帮助。使用 this link 我生成了以下 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 类型的凭据变量,以便重新验证用户。这个类的文档可以在here找到。
【问题讨论】:
【参考方案1】:获取FIRAuthCredential
对象取决于您要使用哪个提供程序重新进行身份验证。
电子邮件:
let credential = EmailAuthProvider.credential(withEmail: email, password: password)
脸书:
let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.currentAccessToken().tokenString)
推特:
let credential = TwitterAuthProvider.credential(withToken: session.authToken, secret: session.authTokenSecret)
谷歌:
let authentication = user.authentication
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
【讨论】:
我在电子邮件和密码字段中输入了什么? 请注意,截至 2020 年,它已略微更新为:var credential = EmailAuthProvider.credential(withEmail: email, password: password)
@Shredder2794 OMG 非常感谢!!!我一直在寻找这个很长时间! :)【参考方案2】:
在 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
...
)
【讨论】:
让 authentication = user.authentication 缺失,我们如何获得那个 HixField ? 对不起,不明白你的问题。你能说得更具体点吗? 我需要更改 Google 帐户的电子邮件地址。我正在使用需要 currentUser.reauthenticate() 的 currentUser.updateEmail() 函数但是我无法获取 GIDSignIn.sharedInstance().currentUser.authentication 来获取 IdToken 和 AccessToken。 GIDSignIn.sharedInstance().currentUser 返回 nil。我正在使用 FirebaseAuthUI 进行登录和注册。而我当前的用户 = Auth.auth().currentUser 没有身份验证属性 我没有使用firebaseui,抱歉 电话号码重新认证怎么样?【参考方案3】:Firebase 的 documentation 目前已过时。这是处理reauthenticate
的正确方法。
let user = Auth.auth().currentUser
user?.reauthenticate(with: credential, completion: (result, error) in
if let err = error
//..read error message
else
//.. go on
)
【讨论】:
如何获取凭证的邮箱和密码? @Clint 我想你问的是EmailAuthProvider
,你可以使用let credential = EmailAuthProvider.credential(withEmail: "example@email.com", password: "myPassword")
。
是的,我很抱歉,这是正确的。我是否应该在电子邮件中实际输入一些内容:“电子邮件”和密码:“密码”?
@Clint 如果您的应用需要登录,这将是用户的电子邮件和密码。如何保存/获取用户信息取决于您。使用reauthenticate
假设您过去已经对用户进行了身份验证。所以你应该已经有了邮箱和密码,否则你需要研究如何验证不是reauthenticate
。
@Clint 您可能需要再次向用户索取密码或开始使用 NSUserDefaults
在本地保存用户密码。以上是关于重新验证用户凭据 Swift的主要内容,如果未能解决你的问题,请参考以下文章