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

SwiftUI-重新验证用户凭据(FireStore),swift,firebase,firebase-authentication,Swift,Firebase,Firebase Authentication,好吧,我在网上查过了,甚至读过谷歌提供的文档,但是,我似乎不知道我错在哪里 我想更改帐户的密码。 这是我现在的代码: var credential: AuthCredential! let user = Auth.auth().currentUser VStack { Text("Enter new password").font(.caption).foregroundColor(Color(SYSTEM_FONT_COLOUR))

好吧,我在网上查过了,甚至读过谷歌提供的文档,但是,我似乎不知道我错在哪里

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

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")
            }
每次我点击
“更新密码”
按钮,应用程序就会崩溃。这是因为
credential
为零。所以我做了研究,找到了方法
EmailAuthProvider()
。 所以我添加了这行代码:

let email = EmailAuthProvider.credential(withEmail: (Auth.auth().currentUser?.email!)!, password: "thisIsNotTheRealPassword")
出于道德原因和最佳实践,我不在数据库中存储用户密码。那么,我如何获取/访问当前用户的密码呢?不储存

我想我可以让用户输入他们的当前密码,这将允许重新验证,但有没有一种方法,我可以这样做,而视图加载?所以他们不需要按两次更新密码按钮?以及更好的用户界面体验。他们的用户已经登录,除非他们注销,否则不需要登录

那么,我如何获取/访问当前用户的密码呢?不储存

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

如果要让用户更改其密码,可以调用user对象。您会注意到它不需要当前密码。用户已经登录的事实证明他们拥有该帐户。我建议你也读一下这本书


如果您试图处理的是忘记密码的情况,则有一个不同的过程。

好的,为了确保我始终对用户进行了身份验证,我要求用户在获得更新其凭据的机会/视图之前输入其登录凭据

我的解决方案:

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

我称之为这种方法。但是,我在控制台中收到一条消息,说明用户需要重新验证。这是消息
此操作敏感,需要最近的身份验证。在重试此请求之前再次登录。
因此我需要重新授权,这将要求用户输入他们的凭据或我自己检索凭据。请编辑问题以更清楚地了解问题所在。您应该包含完整的错误消息,并说明是哪一行代码导致的。