Можно ли сбросить пароль пользователя с помощью Firebase Admin SDK для Node?

Документы Firebase предполагают, что API предлагает те же функции, что и консоль:

Не всегда удобно посещать консоль Firebase для управления пользователями Firebase. API управления пользователями-администраторами предоставляет программный доступ к тем же пользователям. Он даже позволяет вам делать то, чего не может консоль Firebase, например, получать полные данные пользователя и изменять пароль пользователя, адрес электронной почты или номер телефона.

Но в справочных документах не указана функция для сброса пароля пользователя. Я что-то упускаю?


person Oliver Lloyd    schedule 25.09.2017    source источник


Ответы (2)


Это зависит от того, какое определение «перезагрузки» вы используете.

Если вы имеете в виду сброс как «изменить», тогда да — функция updateUser< /a> позволяет указать новый пароль. См. следующий пример из документации:

admin.auth().updateUser(uid, {
  email: "[email protected]",
  phoneNumber: "+11234567890",
  emailVerified: true,
  password: "newPassword",
  displayName: "Jane Doe",
  photoURL: "http://www.example.com/12345678/photo.png",
  disabled: true
})
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully updated user", userRecord.toJSON());
  })
  .catch(function(error) {
    console.log("Error updating user:", error);
  });

Если, с другой стороны, вы имеете в виду сброс, как в «отправить электронное письмо для сброса пароля», то нет, похоже, не существует простого способа сделать это с помощью Admin SDK.

person Joe Clay    schedule 25.09.2017
comment
Я удивлен, что опция редактирования пароля в виде простого текста вообще существует. Мне это не кажется заслуживающим доверия сценарием сброса, поэтому я думал, что что-то пропустил, но, похоже, это не так. - person Oliver Lloyd; 25.09.2017
comment
@OliverLloyd: Да, похоже на странное упущение. - person Joe Clay; 25.09.2017
comment
@OliverLloyd: продолжение - ответ на этот вопрос, вероятно, может быть адаптирован к вашим потребностям, поскольку стандартный клиентский API позволяет отправлять электронное письмо для сброса пароля. - person Joe Clay; 26.09.2017
comment
@JoeClay, так что я предполагаю, что мы должны зашифровать / hashWithSalt пароль перед его сохранением в этом случае, и это будет хорошей практикой? Я использую телефонную аутентификацию для входа в систему своих пользователей, а затем предлагаю им создать пароль в качестве дополнительного уровня безопасности после успешной проверки телефона. - person DevMike; 28.08.2019
comment
Я думаю, что это приведет к двойному хешированию на сервере Firebase, что помешает людям войти в систему. Хотя не уверен! - person Joe Clay; 28.08.2019

Да, ты можешь. Чтобы сгенерировать ссылку для сброса пароля, вы указываете адрес электронной почты существующего пользователя. Затем вы можете использовать любую службу электронной почты, которая вам нравится, чтобы отправить фактическое электронное письмо. Ссылка на документацию.

// Admin SDK API to generate the password reset link.
const userEmail = '[email protected]';
admin.auth().generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  })
.catch((error) => {
  // Some error occurred.
});
person Andrea    schedule 01.09.2020