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

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

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

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

【问题讨论】:

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


    【解决方案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

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

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 2022-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多