首页 > 解决方案 > Firebase - 重新身份验证后更新密码时出现问题

问题描述

我想做什么?

  1. 重新验证用户,检查当前密码(this.state.currentPassword)
  2. 更新新密码 (this.state.newPassword)

我面临什么问题?

  1. STEP 1 正在成功执行
  2. 但是当尝试执行第 2 步时,它会引发错误并从外部尝试获取错误,即“错误重新验证”

var user = firebaseApp.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(
    firebaseApp.auth().currentUser.email,
    this.state.currentPassword
);

// Prompt the user to re-provide their sign-in credentials


// STEP 1 : re-authenticate user

user.reauthenticateAndRetrieveDataWithCredential(credential).then(function() {
  // User re-authenticated.

  //Upon re-authenticating, update password

  //STEP 2 : UPDATE PASSWORD

  var newPassword = firebase.getASecureRandomPassword();

  user.updatePassword(newPassword).then(function() {
    alert("SUCCESS")
    // Update successful.
  }).catch(function(error) {
    console.log(error)
    // An error happened.
  });


}).catch(function(error) {
  // An error happened.
  alert("Error Reauthenticating")
});

标签: javascriptfirebasefirebase-authentication

解决方案


不确定问题是什么,但能够通过以下代码获得所需的输出。

归功于这篇文章

reauthenticate = (currentPassword) => {
  var user = firebase.auth().currentUser;
  var cred = firebase.auth.EmailAuthProvider.credential(
    user.email, currentPassword);
  return user.reauthenticateAndRetrieveDataWithCredential(cred);
}

changePassword = (currentPassword, newPassword) => {
  this.reauthenticate(currentPassword).then(() => {
    var user = firebase.auth().currentUser;
    user.updatePassword(newPassword).then(() => {
      console.log("Password updated!");
    }).catch((error) => {
      console.log(error);
    });
  }).catch((error) => {
    console.log(error);
  });
}

可能需要 ES6 语法,但明天会询问。


推荐阅读