首页 > 解决方案 > SwiftUI - 在 Firebase 上更新密码

问题描述

我试图在 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 上更新我的密码,但它还没有工作。希望你能帮我解决这个问题......................................

标签: swiftfirebaseswiftuifirebase-authentication

解决方案


你不需要重新认证用户,请写下面的代码

Auth.auth().currentUser?.updatePassword(to: newPasswordTF.text!) { (error) in
            if let error = error as NSError? {
                
            }
            // Password change sucussfully
            

          // ...
        }

推荐阅读