[英]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.