gpt4 book ai didi

javascript - 将 Nodemailer 与 Google OAuth 结合使用

转载 作者:行者123 更新时间:2023-11-30 14:30:03 25 4
gpt4 key购买 nike

当我的站点部署在 Heroku 上时,我正在尝试使用 nodemailer 发送电子邮件。

唯一对我有用的就是使用 Google OAuth。

我遇到的问题是,它只在访问 token 更改之前有效。在 Google OAuth Playground 上,我使用自己的 clientIdclientSecret 来换取 refreshTokenaccessToken。它为我生成了那个,还有 3600 秒的到期时间。它在那段时间有效,但之后无效。可以防止它过期吗?还有其他方法可以让它与 Heroku 一起使用吗?

服务器代码上的 Nodemailer:

const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: 'beyondutraining@gmail.com',
clientId: keys.clientID,
clientSecret: keys.clientSecret,
refreshToken: keys.refreshToken,
accessToken: keys.accessToken
}
})

访问 token 过期后的错误:

{ Error: Invalid status code 400
at ClientRequest.req.on.res
(/app/node_modules/nodemailer/lib/fetch/index.js:221:23)
at emitOne (events.js:116:13)
at ClientRequest.emit (events.js:211:7)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:543:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:112:17)
at TLSSocket.socketOnData (_http_client.js:440:20)
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)
type: 'FETCH',
sourceUrl: 'https://accounts.google.com/o/oauth2/token',
code: 'EAUTH',
command: 'AUTH XOAUTH2' }

Github source code

最佳答案

如果您使用的是 Google Auth,请注意: token 应该在最多一个小时后过期(1 小时 = 3600 秒)。这是默认行为 - 您无法更改到期阈值。

但是,在您这边,您可以编写一段代码,从触发时间起每隔一小时触发一次 OAuth 提取。然后您可以在代码中循环刷新的值。

我不确定您为什么要同时发送刷新 token 和访问 token 。您可能希望只发送其中一个。虽然访问 token 最多在一小时后过期,但刷新 token 不会——它存在很长时间。刷新 token 会为您刷新访问 token :因此您不必每次都触发它。

看这里:OAuth2 with Nodemailer

但是,如果您希望继续使用 access_token,您可以浏览以下小节:Custom OAuth Handling .

也许您可以利用参数 renew 的值,您可以根据它编写生成新访问 token 所需的逻辑。

关于javascript - 将 Nodemailer 与 Google OAuth 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com