簡體   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