Firebase Email Notification (Gmail) - не соответствует подписи, которую вы указали - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь отправить уведомление по электронной почте, когда кто-то загружает что-то в мою базу данных Firebase. Я создал облачную функцию в файле index. JSON и, просматривая журналы на консоли Firebase, работает без ошибок. Однако письмо не отправляет, что бы я ни пытался. Я пробовал множество решений на Stack Overflow, а также на других сайтах.

Я исследовал и узнал, что gmail требует некоторых дополнительных настроек, чтобы разрешить автоматические c электронные письма, подобные этой. Я попытался включить "менее безопасные приложения" в Gmail, но это все равно не работает. В идеале я не хочу включать «менее безопасные приложения», но я проверял, будет ли моя функция работать с этим. Я также пытался сохранить учетные данные json в моем рабочем каталоге, но он все еще не работает.

Открывая URL-адрес, предоставленный в консоли Firebase, я получаю это сообщение об ошибке-

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
</Message>
<StringToSign>
GET 1583951311 /gcf-upload-us-central1-c3352ebc-3178-42d3-b531-c1bfe1551623/29f9c13a-2d91-42a1-9be0-d75e466ef2c7.zip
</StringToSign>
</Error>

Я прикрепил свой код ниже. Есть ли шаг подписи, который я пропускаю? Мой firebase работает на облачном движке, поэтому из моего чтения не похоже, что мне нужно что-то добавить, но меня смущает сообщение об ошибке.

const functions = require('firebase-functions');
 const admin = require('firebase-admin');
 const nodemailer = require('nodemailer');
 const slack = require('@slack/webhook')
 const cors = require('cors')({origin: true});

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
});

var transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: 'jackson______@gmail.com', // my email hard coded in
        pass: '________' // my password hard coded in
    }
});

exports.sendEmail = functions.firestore
    .document('orders/{padUniqueID}')
    .onCreate((snap, context) => {


    const mailOptions = {
        from: `jackson______@gmail.com`,  // my email hard coded in
        to: `jackson______@gmail.com`,  // my email hard coded in
        subject: 'test',
        text: 'test'
    };

    return transporter.sendMail(mailOptions, (error, data) => {
        if (error) {
            console.log("email failed")
            console.log(error)
            return
        }
        console.log("Sent!")
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...