【问题标题】:No refresh token or refresh handler callback is set未设置刷新令牌或刷新处理程序回调
【发布时间】:2021-11-07 05:53:23
【问题描述】:

我正在尝试使用 Nodemailer 和 OAuth2 发送电子邮件。它在 localhost 但不在 Heroku 上工作,所以我将 OAuth 添加到 Nodemailer createTransport。但现在它甚至在 localhost 上也不起作用。

我的代码是:

const oAuth2Client =new google.auth.OAuth2(process.env.CLIENT_ID,process.env.CLIENT_SECRET,process.env.REDIRECT_URI);
oAuth2Client.setCredentials({refresh_token:process.env.REFRESH_TOKEN});

const sendMail =async(email,code)=>{
    try
    {const accessToken = await oAuth2Client.getAccessToken();
    let transport = nodemailer.createTransport(smtTransport({
        service: "gmail",
        auth: {
            type:"OAuth2",
            user: "kediaarts@gmail.com",
            pass: process.env.EMAIL_PASS,
            clientId:process.env.CLIENT_ID,
            clientSecret:process.env.CLIENT_SECRET,
            refreshToken:process.env.REFRESH_TOKEN,
            accessToken:accessToken
        }
    }));

    let mailOptions,link;

   link = "http://localhost:5000"+email+"/"+code.toString() ;
    mailOptions={
        from:'"Horizons" <no-reply@gmail.com>',
        to : email,
        subject: "Please verify your Email",
        html : "<h1>Horizons</h1><br><h2>Hi,<br> Please click on the link to verify your email.</h2><br><a href="+link+">Click here to verify</a>",
    }
    const result =await transport.sendMail(mailOptions);
    return result;

} catch(error){
    console.log(error);
}
    
}

我收到以下错误:

Error: No refresh token or refresh handler callback is set.
    at OAuth2Client.getAccessTokenAsync (E:\horizons_blog\node_modules\google-auth-library\build\src\auth\oauth2client.js:224:27)
    at OAuth2Client.getAccessToken (E:\horizons_blog\node_modules\google-auth-library\build\src\auth\oauth2client.js:209:25)
    at sendMail (file:///E:/horizons_blog/controllers/user.js:14:45)      
    at signUp (file:///E:/horizons_blog/controllers/user.js:78:9)
    at processTicksAndRejections (internal/process/task_queues.js:95:5) 

【问题讨论】:

    标签: javascript node.js oauth-2.0 backend nodemailer


    【解决方案1】:

    问题是没有填充 process.env.REFRESH_TOKEN 主要是因为您没有配置 dotenv。

    添加这个来填充它:

    import dotenv from "dotenv";
    
    // *Useful for getting environment vairables
    dotenv.config();

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2014-08-01
      • 2014-06-15
      • 2020-03-23
      • 2016-01-05
      • 2022-10-31
      • 2017-03-01
      • 2021-08-20
      • 1970-01-01
      相关资源
      最近更新 更多