Понимание GeneratePasswordResetEmailLink в Firebase

avatar
EJZ
8 августа 2021 в 20:18
159
1
0

Я пытаюсь создать веб-функцию, позволяющую пользователю вводить свой адрес электронной почты и получать персональную ссылку для сброса пароля. Когда я пытаюсь использовать рекомендованную Firebase функцию здесь, я получаю сообщение об ошибке, связанное с настройкой моего пакета приложений. Поскольку я разрабатываю в Интернете, я не уверен, как правильно отправить электронное письмо для сброса пароля. У меня установлено расширение Firebase Mail, но оно вообще не развертывается (когда я смотрю журналы функций). Ниже приведен мой код:

const actionCodeSettings = {
  url: "https://www.example.com/",

  handleCodeInApp: true,
  iOS: {
    bundleId: "",
  },
  android: {
    packageName: "",
    installApp: true,
    minimumVersion: "12",
  },
  dynamicLinkDomain: "",
};
const userEmail = doc.data().email;
firebase
  .auth()
  .generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    firestore
      .collection("mail")
      .doc()
      .set({
        to: userEmail,
        from: "",
        message: {
          subject: "Reset Password - SWS Records Platform",
          html: `

                ${link}
 
                `,
        },
      })
      .catch((error) => {
        alert(error);
      });
  })
  .catch((error) => {
    alert(error);
  });
  };
Источник

Ответы (1)

avatar
EJZ
8 августа 2021 в 20:18
1

Есть несколько способов решения этой проблемы. Во-первых, вы можете сделать мобильные значения undefined. Документация ActionCodeSettings содержит дополнительную информацию.

const actionCodeSettings = {
  url: 'https://example.com',
  //This domain must be verified in your Firebase Console
  // 'Authentication -> Templates -> Password reset -> Edit Template -> Customize domain'

  handleCodeInApp: undefined,
  iOS: {
    bundleId: undefined,
  },
  android: {
    packageName: undefined,
    installApp: undefined,
    minimumVersion: undefined,
  },
  dynamicLinkDomain: undefined,
};

В качестве альтернативы вы можете использовать старомодную функцию sendPasswordResetEmail:

firebase.auth().sendPasswordResetEmail(email)
  .then(() => {
    // Password reset email sent... no need to deploy to SMTP server. 
    // ..
  })
  .catch((error) => {
    var errorCode = error.code;
    var errorMessage = error.message;
    // ..
  });

Последнее, как правило, является лучшим решением при работе в Интернете: вам не нужно одновременно запускать несколько функций, и у вас также есть возможность редактировать содержимое электронной почты, ссылку и домен непосредственно из консоли Firebase: «Аутентификация - > Шаблоны -> Сброс пароля». Вам также не нужно подключать к приложению SMTP-сервер, обслуживание которого может быть дорогостоящим.