【问题标题】:SwiftUI - Reauthenticate user credentials (FireStore)SwiftUI - 重新验证用户凭据 (FireStore)
【发布时间】:2020-12-18 09:30:30
【问题描述】:

好的,所以我上网查看了,甚至阅读了 Google 提供的文档,但是,我似乎无法弄清楚我哪里出错了。

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

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 体验。他们的用户已经登录,除非他们退出,否则不需要登录。

【问题讨论】:

    标签: swift firebase firebase-authentication


    【解决方案1】:

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

    我的解决方案:

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

    【讨论】:

      【解决方案2】:

      那么我什至如何获取/访问当前用户的密码?不保存?

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

      如果你想让用户更改他们的密码,你可以在用户对象上调用updatePassword()。您会注意到它不需要当前密码。用户已经登录的事实证明他们拥有该帐户。我建议也阅读documentation on setting a user's password

      如果您要处理的情况是忘记密码,sending a password reset email 有一个不同的处理过程。

      【讨论】:

      • 我正在调用该方法。但是,我在控制台中收到一条消息,说明用户需要重新验证。这是消息This operation is sensitive and requires recent authentication. Log in again before retrying this request. 所以我需要重新认证,这将需要用户输入他们的凭据或者我自己检索它们。
      • 请编辑问题以更清楚地了解出了什么问题。您应该包含完整的错误消息,并说明是哪一行代码导致的。
      猜你喜欢
      • 2016-11-10
      • 2021-10-02
      • 2013-02-15
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2016-12-15
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多