Google oauth 2.0 API 密码更改用户名和密码不被接受

Posted

技术标签:

【中文标题】Google oauth 2.0 API 密码更改用户名和密码不被接受【英文标题】:Google oauth 2.0 API password change Username and Password not accepted 【发布时间】:2017-06-29 16:23:45 【问题描述】:

我有一个使用 nodemailer 的表单,xoauth2 和 google APi oauth2,我上周更新了密码,从那以后我的应用程序一直没有工作,我得到:

'535-5.7.8 用户名和密码不被接受。了解详情\n535 5.7.8

我已尝试删除该应用程序并创建一个新应用程序,但它似乎无法获取新更改的密码。有关如何解决此问题的任何建议?我允许安全性较低的应用,并显示解锁验证码。

【问题讨论】:

【参考方案1】:

我通过更新到最新版本的 Nodemailer 解决了这个问题,并删除了 xoauth2 模块,因为 Nodemailer 3 具有更好的 Oauth 2 支持。在 Google Oauth 2.0 操场上,我能够获得正确的访问权限并刷新令牌。

【讨论】:

你能用 Nodemailer oauth2 显示任何代码吗?我有同样的错误有你。谢谢! 如果您不必在访问代码刷新时不断更改代码.. @KeplerIO 我将我的存储在一个 json 文件中,并在它更改时更新它 @GraemePaul 我想这行得通,但据我记得看到的,它每 1500 秒左右刷新一次。必须不断改变是非常乏味的。我发现使用标准的 smtp Gmail API 更轻松【参考方案2】:

@sambellerose 我来自

const generator = xoauth2.createXOAuth2Generator(
  user: serverConfig.gmail.client_user,
  clientId: serverConfig.gmail.client_id,
  clientSecret: serverConfig.gmail.secret,
  refreshToken: serverConfig.gmail.refresh_token,
  accessToken: serverConfig.gmail.access_token,
);


const transporter = nodemailer.createTransport(
  service: 'gmail',
  auth: 
    xoauth2: generator,
  ,
);

只要有以下:

const transporter = nodemailer.createTransport(
  service: 'gmail',
  auth: 
    type: 'OAuth2',
    user: serverConfig.gmail.client_user,
    clientId: serverConfig.gmail.client_id,
    clientSecret: serverConfig.gmail.secret,
    refreshToken: serverConfig.gmail.refresh_token,
    accessToken: serverConfig.gmail.access_token,
  ,
);

希望对你有帮助

【讨论】:

非常感谢!您可以接受自己的答案,就像魅力一样。【参考方案3】:

类似于上面的答案。这就是我构建我的结构的方式,并且它立即起作用。

const transporter = nodemailer.createTransport(
        host: "smtp.gmail.com",
        port: 465,
        secure: true, // true for 465, false for other ports
        auth: 
            type: "OAuth2",
            user: process.env.EMAIL, // email you are using with nodemailer
            pass: process.env.PASSWORD, // email password
            clientId: process.env.CLIENTID,
            clientSecrect:process.env.CLIENTSECRET,
            refreshToken: process.env.REFRESHTOK,
            accessToken: process.env.ACCESSTOK,
        ,
        tls:
           rejectUnauthorized:false 
        
      );

凭证的此链接也可以正常工作。 https://www.youtube.com/watch?v=JJ44WA_eV8E

您必须四处浏览,因为谷歌网页布局有点不同。当然可以!

【讨论】:

以上是关于Google oauth 2.0 API 密码更改用户名和密码不被接受的主要内容,如果未能解决你的问题,请参考以下文章

通过 OAuth 2.0 自动使用 google-api-dotnet-client

春天。 REST API 的实现 Oauth.2.0

OAuth 2.0 适用于 Google 表格,但不适用于 Google Calendar API

将 OAuth 2.0 和 Google 电子表格 API 与 Java 结合使用的示例是啥?

在哪里可以找到 Google 的 OAuth 2.0 API 的范围列表? [关闭]

通过 OAuth 2.0 和私钥(即服务帐户)访问 Google Contacts Api