Как проверить текущий пароль пользователя firebase - PullRequest
0 голосов
/ 30 декабря 2018

Я создаю форму вact-redux для изменения пароля пользователя.Мне интересно, как я могу проверить текущий пароль пользователя, чтобы сменить его на новый.в моей форме у меня есть 2 поля: старый пароль, новый пароль.

это мое действие:

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?Должен ли я использовать signInWithEmailAndPassword ()?Или есть функция для проверки текущего пароля без повторного вызова входа, так как мой пользователь уже вошел в систему?Спасибо

1 Ответ

0 голосов
/ 31 декабря 2018

Ну, я думаю, что вы хотите, чтобы пользователь ввел старый пароль, просто чтобы проверить, является ли он действительным владельцем учетной записи или нет.

Firebase очень хорошо справляется с этой ситуацией, вам просто нужно вызвать 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 вернет ошибку - «Эта операция чувствительна и требует недавней аутентификации. Войдите в систему, прежде чем повторять этот запрос. "

(Click to view image)

Таким образом, вам не нужно проверять старый пароль, как это делает Firebase.

Но если вы просто хотите сделать это за один раз, без необходимости повторного входа пользователя.Для этого также есть способ.

Для объекта пользователя reauthenticateAndRetrieveDataWithCredential существует метод, вам просто нужно передать объект 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)
  }
}

Узнайте больше о фактах пожарной базы - https://firebase.google.com/docs/auth/web/manage-users#re-authenticate_a_user

Надеюсь, это поможет

...