- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为我的 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/
情况我想使用 ui-date 在我的应用程序中设置/编辑日期。我使用最新稳定版本的 Angular、Angular-UI、JQuery-UI 等。 问题一旦使用日期选择器选择了日期,我的模型中的日期将
编辑: jQuery UI 可选择小部件内置了一个回调,stop,我需要知道如何以编程方式触发此事件。 (措辞不佳)我已将事件监听器附加到 jQuery UI Selectable Widget 。如
我正在尝试建立一个下一个JS与尾风用户界面提供的反应组件的网络应用程序。顺风用户界面是在幕后使用无头用户界面。。默认情况下,Next JS将构建服务器端组件,除非您在页面顶部添加“使用客户端”。不幸的
我正在尝试建立一个下一个JS与尾风用户界面提供的反应组件的网络应用程序。顺风用户界面是在幕后使用无头用户界面。。默认情况下,Next JS将构建服务器端组件,除非您在页面顶部添加“使用客户端”。不幸的
我正在尝试应用这个 SlickGrid 示例: http://mleibman.github.com/SlickGrid/examples/example4-model.html 到我自己的网络项目。
我想整理我的 Schemas为我的实体类生成,DTO 类位于 Springdoc ui . 我可以对 tags 进行排序和 operations通过以下配置 yml文件,但我的模式不是按排序顺序排列的
有谁知道阻止 ui-sref 重新加载状态的方法吗? 我无法通过“$stateChangeStart”事件执行此操作,因为 ui-sref 仅更改参数而不更改状态名称。 我的左边是书单,左边是书的详细
我正在 jquery ui 对话框中使用 jquery ui 自动完成小部件。当我输入搜索文本时,文本框缩进(ui-autocomplet-loading)但不显示任何建议。 var availabl
我正在尝试将 Kendo UI MVVM 框架与 Kendo UI 拖放机制结合使用;但我很难找到如何将数据从 draggable 对象中删除。 我的代码是这样的...... var viewMode
Kendo UI Web 和 Kendo UI Core 之间有什么区别 https://www.nuget.org/packages/KendoUIWeb http://www.nuget.org/
我正在尝试将 Kendo UI MVVM 框架与 Kendo UI 拖放机制结合使用;但是我很难找到如何从 draggable 对象中删除数据。 我的代码是这样的…… var viewModel =
使用 Angular JS - UI 路由器,我需要从我的父 View project.details 到我的 subview project.details.tasks 进行通信。我的 subvie
KendoUI 版本 2013.3.1119使用 Kendo MVVM 我有一个我构建的颜色选择器,它使用平面颜色选择器和使用调色板的颜色选择器。它们都可以正常运行,但平面颜色选择器的布局已关闭, s
我在非 UI 线程上,我需要创建并显示一个 SaveDialog。但是当我尝试显示它时:.ShowDialog() 我得到: "An unhandled exception of type 'Syst
我正在试验 jquery-ui 并查看和克隆一些示例。在一个示例(自动完成的组合框)中,我看到一个带有 ui-widget 类的 anchor (a) 元素,它与包含的 css 文件中的 .ui-wi
我需要返回一个 UI 列表,我用这个方法: getList(): Observable { return this.httpClient.get("/api/listui").pipe
我有 ui-grids在 angular-ui-tabs ,它们位于 ng-if 中以避免呈现问题。如果有更多数据并且网格进入滚动模式,则单击选项卡时数据会完全消失。我相信这是一个 ui-grids-
这似乎是一个通用的问题,与其他几个 React 开源框架相比,我真的很喜欢 Material ui 的可扩展性。 问题 “@material-ui/core”和“@material-ui/lab”中的
我有一个根页面(index.html),带有侧边栏(“菜单”)和主要内容 div(“主”),因此有两个 ui-view div - 一个称为“菜单”,一个称为“主”。 当主要内容区域有网站列表 (/s
有人在http://jsfiddle.net/hKYWr/上整理了一个很好的 fiddle 。关于使用 angular-ui 和 jqueryui sortable 来获得良好的可排序效果。 如何在两
我是一名优秀的程序员,十分优秀!