Firebase отправляет подтверждение по электронной почте пользователю - PullRequest
0 голосов
/ 23 апреля 2020

Я использую Javascript и Vue и интегрирую firebase с моим приложением

Сценарий (уже построен)

  • У меня есть sign in страница, на которой пользователи выполняют вход
  • Для пользователя, который должен быть подписан в свойстве emailVerified, должно быть true

Проблема

  • Я могу отправить подтверждение по электронной почте только при использовании метода firebase.auth().createUserWithEmailAndPassword(email, password)

Способ регистрации

signup: async (email, password) => {
    const user = await firebase.auth().createUserWithEmailAndPassword(email, password)
    await user.user.sendEmailVerification()
    return `Check your email for verification mail before logging in`
  },

Требуется решение

  • Я создаю нового пользователя из firebase console

  • Я передаю email в качестве параметра или uid и этот метод должен отправить подтверждение по электронной почте пользователю, чтобы они могли проверить свою электронную почту

  • Полностью отменить метод signup, так как он мне больше не нужен, чтобы отправить подтверждающее письмо

Можно ли отправить письмо с подтверждением без входа в систему?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Можно ли в любом случае отправить подтверждение по электронной почте без входа в систему?

Письма с подтверждением можно отправлять только из клиентского SDK и только после того, как пользователь вошел в систему. сделано для того, чтобы предотвратить возможность злоупотребления серверами Firebase для отправки спама.

Если существующий поток проверки электронной почты Firebase не соответствует вашим потребностям, вы можете реализовать свой собственный поток и использовать Admin SDK установить статус подтверждения , как только они удовлетворят вашим требованиям проверки.

1 голос
/ 23 апреля 2020

Вы можете использовать облачную функцию, чтобы создать ссылку для проверки электронной почты и отправить ее пользователю через микросервис электронной почты, такой как Sendgrid, Mailjet или Mailgun, или через собственный SMTP-сервер.

Вы должны активировать эту облачную функцию, когда пользователь Firebase создается с помощью обработчика событий functions.auth.user().onCreate().

Поскольку вы создадите пользователя через консоль Firebase, облачная функция будет запускается без необходимости входа пользователя.

Что-то вроде этого:

exports.sendEmailVerification = functions.auth.user().onCreate((user) => {

    const email = user.email;

    const url = '...'  //Optional, see https://firebase.google.com/docs/auth/custom-email-handler
    const actionCodeSettings = {
        url: url
    };

    // Use the Admin SDK to generate the email verification link.
    return admin.auth().generateEmailVerificationLink(email, actionCodeSettings)
        .then((link) => {
            // Construct email verification template, embed the link and send the email
            // by using custom SMTP server.
            // or a microservice like Sendgrid
            return ...
        })
        .catch((error) => {
            // Some error occurred.
        });

});

Вы найдете здесь официальный пример облачной функции, которая отправляет электронное письмо.

...