SwiftUI - 在 Firebase 上更新密码
Posted
技术标签:
【中文标题】SwiftUI - 在 Firebase 上更新密码【英文标题】:SwiftUI - Update password on Firebase 【发布时间】:2021-09-27 04:43:42 【问题描述】:我正在尝试在 Firebase 上更新我的密码,但它还没有工作。希望你能帮我解决这个问题
表格
struct ChangePassword: View
@State var oldPassword: String = ""
@State var newPassword: String = ""
@State var confirmPassword : String = ""
@ObservedObject var loginViewModel = LoginViewModel()
var body: some View
ZStack
VStack
HStack
Text("Old Pw")
.poppinsRegularFont(size: 17)
.foregroundColor(Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))).opacity(1)
SecureField("", text: $oldPassword)
.padding()
.font(Font.system(size: 15, weight: .medium, design: .serif))
.frame(width: UIScreen.main.bounds.width - 80,height: 48)
.background(
Color.black.opacity(0.1)
)
.padding(.bottom,20)
HStack
Text("New Pw")
.poppinsRegularFont(size: 17)
.foregroundColor(Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))).opacity(1)
SecureField("", text: $newPassword)
.padding()
.font(Font.system(size: 15, weight: .medium, design: .serif))
.background(
Color.black.opacity(0.1)
)
.padding(.bottom,20)
HStack
Text("Confirm Pw")
.poppinsRegularFont(size: 17)
.foregroundColor(Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1))).opacity(1)
SecureField("", text: $confirmPassword)
.padding()
.font(Font.system(size: 15, weight: .medium, design: .serif))
.background(
Color.black.opacity(0.1)
)
Button(action:
loginViewModel.updatePassword(password: confirmPassword)
)
Text("Save")
函数更新密码
class LoginViewModel: ObservableObject
let userPassword = Auth.auth().currentUser
var credential: AuthCredential?
func updatePassword(password: String)
if let credential = credential
userPassword?.reauthenticate(with: credential ) error,_ in
if error != nil
// An error happened.
else
Auth.auth().currentUser?.updatePassword(to: password) (error) in
// ...
我正在尝试在 Firebase 上更新我的密码,但它还没有工作。希望您能帮我解决这个问题.......................................
【问题讨论】:
一个叫'credential'的人从何而来? 您的 Auth.auth().currentUser?.updatePassword(to: password) 方法中一个名为“password”的人从何而来? 这是因为我自己阅读了文档。如果有不对的地方,请帮我改正 @ElTomato 我看它:firebase.google.com/docs/auth/ios/manage-users#swift 据我所知,您永远不会将credential
传递给您的 LoginViewModel。究竟是什么问题?你已经调试过这个了吗?
【参考方案1】:
你不需要重新认证用户,请写下面的代码
Auth.auth().currentUser?.updatePassword(to: newPasswordTF.text!) (error) in
if let error = error as NSError?
// Password change sucussfully
// ...
【讨论】:
感谢您的回答,但它有点不准确。来自 Firebase 文档 Re-authenticate a user,其中指出 一些安全敏感操作,例如删除帐户、设置主电子邮件地址和 更改密码要求用户最近登录 i> 并且在这些情况下,用户必须重新认证才能执行操作。不过,在用户最近通过身份验证的情况下,答案很好。但最好是安全而不是后悔并以崩溃告终。以上是关于SwiftUI - 在 Firebase 上更新密码的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 中仅更新来自 Firebase 的新数据
在 Firebase 完成块中设置 @Published var 不更新 SwiftUI 视图
删除 SwiftUI 后 Firebase Firestore 不更新 UI