gpt4 book ai didi

ios - Firebase Auth UI 如何处理重新认证?

转载 作者:可可西里 更新时间:2023-11-01 02:08:44 28 4
gpt4 key购买 nike

我正在为我的 Swift iOS 应用程序使用 Firebase Auth。 Google 建议使用 Firebase Auth UI 作为“插入式”身份验证系统,但它仅处理初始登录。我现在正致力于允许用户更改个人资料,例如电子邮件和密码。

进行这些更改的文档在几个地方提到某些更改要求用户最近登录(请参阅 https://firebase.google.com/docs/auth/ios/manage-users#get_the_currently_signed-in_user):

Some security-sensitive actions—such as deleting an account, setting a primary email address, and changing a password—require that the user has recently signed in. If you perform one of these actions, and the user signed in too long ago, the action fails with the FIRAuthErrorCodeCredentialTooOld error.

首先,API 中似乎没有任何地方出现 FIRAuthErrorCodeCredentialTooOld 错误。

其次,文档建议使用 reauthenticate(with:) 来解决这个问题,代码示例:

let user = FIRAuth.auth()?.currentUser
var credential: FIRAuthCredential

// Prompt the user to re-provide their sign-in credentials

user?.reauthenticate(with: credential) { error in
if let error = error {
// An error happened.
} else {
// User re-authenticated.
}
}

问题是,因为我使用了 Firebase Auth UI,所以我没有用于获取用户凭据的自定义 UI。

我目前的想法是,我可以通过在发生此错误时显示用于登录的相同 Firebase Auth UI 来重新进行身份验证。但是,我不知道这是否是这样做的认可方式,或者它是否会起作用,或者它是否会在未来继续起作用。我检查了 Firebase Auth UI 代码库,没有任何地方调用 reauthenticate()。文档特别针对此错误调用此方法做了大量工作,所以我很困惑。

如果我需要构建一个完整的 UI 来执行重新身份验证,包括多个提供商,那么使用 Firebase Auth UI 有什么意义?

最佳答案

关于错误代码,文档只是需要更新。错误代码现在称为 FIRAuthErrorCode.errorCodeRequiresRecentLogin

现在,对于您面临的 UI 问题,为什么不提供一个带有文本字段的 UIAlertController,用户可以使用该文本字段输入密码以进行重新验证?它肯定比创建整个 View Controller 简单得多(并且对用户更友好)。

这里有一个非常简单的示例,说明如何在不经历这么多麻烦的情况下重新验证​​用户:

// initialize the UIAlertController for password confirmation
let alert = UIAlertController(title: "", message: "Please, enter your password:", preferredStyle: UIAlertControllerStyle.alert)
// add text field to the alert controller
alert.addTextField(configurationHandler: { (textField) in
textField.placeholder = "Password"
textField.autocapitalizationType = .none
textField.autocorrectionType = .no
textField.isSecureTextEntry = true
})
// delete button action
alert.addAction(UIAlertAction(title: "Delete account", style: UIAlertActionStyle.destructive, handler: {action in
// retrieve textfield
let txtFld = alert.textFields![0]
// init the credentials (assuming you're using email/password authentication
let credential = FIREmailPasswordAuthProvider.credential(withEmail: (FIRAuth.auth()?.currentUser?.email)!, password: txtFld.text!)
FIRAuth.auth()?.currentUser?.reauthenticate(with: credential, completion: { (error) in
if error != nil {
// handle error - incorrect password entered is a possibility
return
}

// reauthentication succeeded!
})
}))
// cancel reauthentication
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: {action in }))

// finally, present the alert controller
self.present(alert, animated: true, completion: nil)

每当您需要更改用户的电子邮件或删除他们的帐户(密码重置根本不需要登录)时,使用上面的代码片段弹出一个警报 Controller ,他们可以在其中重新输入密码。

编辑:请注意,上面提供的代码会强制解包当前用户的电子邮件,因此请确保您在那个阶段有用户登录,否则您的应用会崩溃。

关于ios - Firebase Auth UI 如何处理重新认证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41712370/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com