как узнать провайдера firebase аутентификации в облачной функции - PullRequest
0 голосов
/ 24 февраля 2019

Я использую облачные функции Firebase для отправки приветственного письма пользователям, когда они создают новые учетные записи в приложении.Мне нужно отправлять это приветственное письмо, только если пользователь создает свою электронную почту с использованием аутентификации emailAndPassword, поэтому мне нужно знать поставщика аутентификации пользователя.Теперь это мой код:

    const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: gmailEmail,
    pass: gmailPassword,
  },
});

// Your company name to include in the emails
// TODO: Change this to your app or company name to customize the email sent.
const APP_NAME = 'العب .. تعلم';

// [START sendWelcomeEmail]
/**
 * Sends a welcome email to new user.
 */
// [START onCreateTrigger]
exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => {
// [END onCreateTrigger]
  // [START eventAttributes]
  const email = user.email; // The email of the user.
  const displayName = user.displayName; // The display name of the user.
  // [END eventAttributes]

  return sendWelcomeEmail(email, displayName);
});
// [END sendWelcomeEmail]



// [START sendByeEmail]
/**
 * Send an account deleted email confirmation to users who delete their accounts.
 */
/* TODO :remove this comment to add goodbye email
// [START onDeleteTrigger]
exports.sendByeEmail = functions.auth.user().onDelete((user) => {
// [END onDeleteTrigger]
  const email = user.email;
  const displayName = user.displayName;

  return sendGoodbyeEmail(email, displayName);
});
// [END sendByeEmail]


*/

// Sends a welcome email to the given user.
function sendWelcomeEmail(email, displayName) {
  const mailOptions = {
    from: `${APP_NAME} <noreply@firebase.com>`,
    to: email,
  };

  // The user subscribed to the newsletter.
  mailOptions.subject = `welcome in our app! `;
  const startText = `Welcome in our app! We hope you enjoy it. To know the latest news about the app and the latest competitions please join the following facebook page : `;
  const groupLink = `https://www.facebook.com/2057244580979539/`;
  mailOptions.text = startText + `\n\n` + groupLink;//TODO : add new line instead of space
  return mailTransport.sendMail(mailOptions).then(() => {
    return console.log('New welcome email sent to:', email);
  });
}

Этот код будет отправлять приветственное письмо любому пользователю, который создает электронную почту в приложении. Мне нужно отправлять пользователю электронное письмо только в том случае, если он создает новое электронное письмо в приложении с помощью emailAndPasswordProvider.

1 Ответ

0 голосов
/ 25 февраля 2019

У вас есть 2 варианта: Вы можете проверить массив записей пользователя providerData.Каждая запись будет иметь providerId:

exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => {
  console.log(user.providerData[0].providerId); // This will be 'password'
  ...
});

Однако вышеупомянутое будет иметь одинаковое значение для входа по электронной почте, а также по электронной почте / паролю.

Другой вариант:использовать клиентский Node.js SDK и вызвать:

firebase.auth().fetchSignInMethodsForEmail(user.email)
  .then((signInMethods) => {
    if (signInMethods.indexOf('password') !== -1) {
      // Email corresponds to email/password user.
      // Email link user will have 'emailLink' in the array.
    }
  })
...