Javascript 如何验证firebase用户当前密码

Javascript 如何验证firebase用户当前密码,javascript,reactjs,firebase,react-redux,firebase-authentication,Javascript,Reactjs,Firebase,React Redux,Firebase Authentication,我正在创建一个表单,在react redux中更改用户密码。我想知道如何验证用户当前密码以更改为新密码。 在我的表单中,我有两个字段:旧密码、新密码 这是我的行动: const { currentUser } = auth currentUser.updatePassword(newPassword) .then( success => { dispatch({ type: CHANGE_USER_PASSWORD_SUCCESS, payload: c

我正在创建一个表单,在react redux中更改用户密码。我想知道如何验证用户当前密码以更改为新密码。 在我的表单中,我有两个字段:旧密码、新密码

这是我的行动:

const { currentUser } = auth
currentUser.updatePassword(newPassword)
.then(
  success => {
    dispatch({
      type: CHANGE_USER_PASSWORD_SUCCESS,
      payload: currentUser
    })
  },
  error => {
    dispatch({
      type: CHANGE_USER_PASSWORD_FAIL,
      error: error.message
    })
  }
)
我想知道,如何在firebase中验证旧密码?我应该使用带有Email和Password()的Signin吗?或者,由于我的用户已经登录,是否有一个功能可以在不再次调用登录的情况下验证当前密码?
谢谢

我相信您希望用户输入旧密码只是为了验证它是否是帐户的实际所有者

Firebase可以很好地处理这种情况,您只需要在user对象上调用updatePassword方法并传入新密码

const changePassword = async newPassword => {
    const user = firebase.auth().currentUser;
    try {
      await user.updatePassword(newPassword)
      console.log('Password Updated!')
    } catch (err) {
      console.log(err)
    }
}
如果用户上次登录已有一段时间,firebase将返回一个错误- “此操作很敏感,需要最近的身份验证。请在重试此请求之前登录。”

因此,您不需要像firebase那样检查旧密码

但是如果您只想一次性完成,而不需要用户再次登录。 这也是有办法的

在用户对象
上有一个方法,可以使用凭据重新验证和检索数据
您只需传入一个cred对象(电子邮件和密码),然后刷新身份验证令牌

const reauthenticate = currentPassword => {
  const user = firebase.auth().currentUser;
  const cred = firebase.auth.EmailAuthProvider.credential(
      user.email, currentPassword);
  return user.reauthenticateAndRetrieveDataWithCredential(cred);
}
在你的特殊情况下,你可以有这样的东西

const changePassword = async (oldPassword, newPassword) => {
  const user = firebase.auth().currentUser
  try {
    // reauthenticating
    await this.reauthenticate(oldPassword)
    // updating password
    await user.updatePassword(newPassword)
  } catch(err){
    console.log(err)
  }
}
了解有关firebase重新授权的更多信息-


希望有帮助

这个答案有点过时了。使用
reauthenticateWithCredential
代替不推荐的
reauthenticateAndRetrieveDataWithCredential