繁体   English   中英

SwiftUI - 在 Firebase 上更新密码

[英]SwiftUI - Update password on 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 上的密码进行更新,但目前还无法正常工作。 希望你能帮我解决这个问题......................................

让用户 = Auth.auth().currentUser

    let credential = EmailAuthProvider.credential(withEmail: user!.email!, password: currentPassword)

    user?.reauthenticate(with: credential, completion: { (authResult, error) in
       if let error = error {
          // Handle re-authentication error
          return
       }
       user?.updatePassword(to: newPassword, completion: { (error) in
          if let error = error {
             // Handle password update error
             return
          }
          // Password update successful
       })
    })

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

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

          // ...
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM