Ошибка: Неверный логин: Требуется пароль приложения c - PullRequest
0 голосов
/ 16 марта 2020

я хочу отправить приветственное уведомление, когда пользователь входит в систему с помощью Cloud-Function с аутентификацией firebase, поэтому я использую nodejs CLI и запускаю код

мой индекс. js файл 'use strict';

    const functions = require('firebase-functions');
    const nodemailer = require('nodemailer');
    // Configure the email transport using the default SMTP transport and a GMail account.
    // For Gmail, enable these:
    // 1. https://www.google.com/settings/security/lesssecureapps
    // 2. https://accounts.google.com/DisplayUnlockCaptcha
    // For other types of transports such as Sendgrid see https://nodemailer.com/transports/
    // TODO: Configure the `gmail.email` and `gmail.password` Google Cloud environment variables.

    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 = 'Cloud Storage for Firebase quickstart';

    // [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.
     */
    // [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.
    async function sendWelcomeEmail(email, displayName) {
      const mailOptions = {
        from: `${APP_NAME} <noreply@firebase.com>`,
        to: email,
      };

      // The user subscribed to the newsletter.
      mailOptions.subject = `Welcome to ${APP_NAME}!`;
      mailOptions.text = `Hey ${displayName || ''}! Welcome to ${APP_NAME}. I hope you will enjoy our service.`;
      await mailTransport.sendMail(mailOptions);
      console.log('New welcome email sent to:', email);
      return null;
    }

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

      // The user unsubscribed to the newsletter.
      mailOptions.subject = `Bye!`;
      mailOptions.text = `Hey ${displayName || ''}!, We confirm that we have deleted your ${APP_NAME} account.`;
      await mailTransport.sendMail(mailOptions);
      console.log('Account deletion confirmation email sent to:', email);
      return null;
    }

я передаю этот код https://github.com/firebase/functions-samples/blob/master/quickstarts/email-users/functions/index.js

, но после запуска кода я получаю сообщение об ошибке

    Error: Invalid login: 534-5.7.9 Application-specific password required. Learn more at
534 5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor i82sm13686303ilf.32 - gsmtp
    at SMTPConnection._formatError (/srv/node_modules/nodemailer/lib/smtp-connection/index.js:784:19)
    at SMTPConnection._actionAUTHComplete (/srv/node_modules/nodemailer/lib/smtp-connection/index.js:1523:34)
    at SMTPConnection._responseActions.push.str (/srv/node_modules/nodemailer/lib/smtp-connection/index.js:550:26)
    at SMTPConnection._processResponse (/srv/node_modules/nodemailer/lib/smtp-connection/index.js:942:20)
    at SMTPConnection._onData (/srv/node_modules/nodemailer/lib/smtp-connection/index.js:749:14)
    at TLSSocket.SMTPConnection._onSocketData.chunk (/srv/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)

Я также разрешаю менее безопасные приложения Из вашей учетной записи Google, а также сделал 2 пошаговой проверки Here, но все равно получил ошибку

Я прочитал все «Подобные вопросы» здесь в stackoverflow и не знаю, нужно ли мне что-нибудь еще или если я делаю что-то плохое

1 Ответ

3 голосов
/ 17 марта 2020

Если вы включили двухфакторную аутентификацию в своей учетной записи Google, вы не можете использовать свой обычный пароль для программного доступа к Gmail. Вам необходимо сгенерировать пароль приложения c и указать его вместо действительного пароля.

Шаги:

Войдите в свою учетную запись Google Go, войдите в Мой аккаунт> Войдите -in & Security> Пароли приложений (войдите еще раз, чтобы подтвердить, что это вы) Прокрутите вниз, чтобы выбрать приложение (в поле «Пароль и способ входа») и выберите «Другое» (пользовательское имя). Присвойте паролю этому приложению имя, например «nodemailer». Выберите «Создать». Скопируйте длинный сгенерированный пароль и вставьте его в сценарий Node.js вместо действительного пароля Gmail.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...