繁体   English   中英

SwiftUI - 重新验证用户凭据 (FireStore)

[英]SwiftUI - Reauthenticate user credentials (FireStore)

好的,所以我在网上看过,甚至阅读了谷歌提供的文件,但是,我似乎无法弄清楚我哪里出错了。

我想更改帐户的密码。 这是我现在的代码:

var credential: AuthCredential!

let user = Auth.auth().currentUser

VStack {
                Text("Enter new password").font(.caption).foregroundColor(Color(SYSTEM_FONT_COLOUR))
                       PasswordTextField(password: $changeLoginDetailsViewModel.newPassword)
                Spacer()
                SignInButton(action: {
                    self.user?.reauthenticate(with: self.credential) { (result, error) in
                        if let error = error {
                            print(error.localizedDescription)
                        }
                    }
                    self.changeLoginDetailsViewModel.changePassword()
                }, label: "Update Password")
            }

每次我点击"Update password"按钮时,应用程序都会崩溃。 那是因为credential为零。 所以我做了我的研究并找到了方法EmailAuthProvider() 所以我添加了这行代码:

let email = EmailAuthProvider.credential(withEmail: (Auth.auth().currentUser?.email!)!, password: "thisIsNotTheRealPassword")

出于道德原因和最佳实践,我不在我的数据库中存储用户密码。 那么我怎样才能获得/访问当前用户的密码呢? 不存储它?

我想我可以让用户输入他们当前的密码,这样可以重新进行身份验证,但是有没有一种方法可以在加载视图时执行此操作? 所以他们不需要按两次更新密码按钮? 并获得更好的 UI 体验。 他们的用户已经登录,除非他们注销,否则不需要登录。

好的,为了确保我始终对用户进行身份验证,我要求用户在有机会/查看更新其凭据之前输入他们的登录凭据。

我的解决方案:

Settings > Re-authentication view (explained to the user it's for security purposes) > Change password and e-mail view

那么我怎样才能获得/访问当前用户的密码呢? 不存储它?

你不能。 Firebase 身份验证完全管理密码,它不提供获取该字符串的方法。 这样做将是一个安全问题。

如果您想让用户更改他们的密码,您可以对用户 object 调用updatePassword() 。您会注意到它不需要当前密码。 用户已经登录的事实证明他们拥有该帐户。 我还建议阅读有关设置用户密码的文档

如果您要处理的情况是忘记了密码,则可以通过发送密码重置 email来进行不同的处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM