首页 > 解决方案 > “UnhandledPromiseRejectionWarning:错误:未设置刷新令牌。” 尝试使用 gmail API 使用 digitalocean 部署节点应用程序时

问题描述

const express = require('express');
require("dotenv").config();
const app = express();
const nodemailer = require("nodemailer");
const { google } = require("googleapis");
const OAuth2 = google.auth.OAuth2;

let pass = process.env.PASSWORD;
const PORT = process.env.PORT || 5000;

新的刷新令牌在 .env 文件中

const CLIENT_ID = process.env.CLIENTID;
const CLIENT_SECRET = process.env.SECRET;
const REDIRECT_URI = process.env.REDIRECTURI;
const REFRESH_TOKEN = process.env.REFTOKEN;

const oauth2Client = new OAuth2(
    CLIENT_ID,
    CLIENT_SECRET,
    "https://developers.google.com/oauthplayground"
);

错误是这样的 - newPortfolio/node_modules/google-auth-library/build/src/auth/oauth2client.js:214 throw new Error('No refresh token is set.'); 不确定它在我的代码中的位置

oauth2Client.setCredentials({
    refresh_token: REFRESH_TOKEN
});
const accessToken = oauth2Client.getAccessToken()


app.use(express.static('public'));
app.use(express.json());

app.get('/', (req, res)=> {
    res.sendFile(__dirname + '/public/index.html')
})

app.post('/', (req, res) => {

    const smtpTransport = nodemailer.createTransport({
        service: "gmail",
        auth: {
             type: "OAuth2",
             user: "my@email.com", 
             clientId: CLIENT_ID,
             clientSecret: CLIENT_SECRET,
             refreshToken: REFRESH_TOKEN,
             accessToken: process.env.ACCESSTOKEN
        }
   });

    const mailOptions = {
        from: req.body.email,
        to: 'my@email.com',
        subject: `req.body.subject`,
        text: req.body.message
    }


    smtpTransport.sendMail(mailOptions, (error, response) => {
        error ? console.log(error) : res.send('success');
        smtpTransport.close();
   });
})
 
app.listen(PORT, () =>{
    console.log(`server running on port ${PORT}`)
})

在 localhost 上运行时一切正常。收到邮件,一切正常。但试图在digitalocean上运行。是给出了令牌错误,当我检查网站时,没有 CSS/JS 并且电子邮件没有发送

标签: gmail

解决方案


推荐阅读