与this类似的问题,但这些答案已过时,不适用于我目前的情况。
这是我的网络应用程序的注册流程:
这个工作正常(最近一周前进行了测试),但今天它突然给了我:
error: invalid_grant
我使用了Node的xoauth2软件包,自6月以来这个版本还没有更新,所以我不明白为什么现在突然出现这个问题 - 除非谷歌在过去一周左右改变了一些东西?
我使用的代码示例调用错误:
// User credentials - all verified working + correct
xoauth2gen = xoauth2.createXOAuth2Generator({
user: email,
clientId: configAuth.googleAuth.clientID,
clientSecret: configAuth.googleAuth.clientSecret,
refreshToken: refresh
});
// SMTP/IMAP
xoauth2gen.getToken(function(err, token){
if(err){
return console.log("XOAUTH2 Error: " + err);
}
if(type === "full"){
cb(token);
}
});
编辑:为了完整起见,我在生成刷新令牌时使用的范围是:
app.get('/auth/google',
passport.authenticate('google',
{
scope : ['https://mail.google.com/',
'profile',
'email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.google.com/m8/feeds'],
accessType: 'offline',
approvalPrompt: 'force'
}
));
答案 0 :(得分:2)
根据RFC 6749,在以下情况下返回invalid_grant:
提供的授权许可(例如,授权代码,资源 所有者凭据)或刷新令牌无效,已过期,已撤销,确实如此 与授权请求中使用的重定向URI不匹配,或 发给了另一位客户。
查看here
答案 1 :(得分:1)
最终通过在我的Gmail帐户中取消授权我的应用程序,删除我存储在MongoDB中并从头开始的刷新令牌来解决这个问题。看来这只是我改变了一些权限的情况,而这些权限并未通过oAuth2授予。
答案 2 :(得分:0)
如果您使用本地主机运行测试服务器,则如果系统时间(操作系统时间)不同步,则可能会发生此错误。
我的系统时钟不正确,因为CMOS电池没电了。每次重新启动笔记本电脑时,时间都不正确。因此,我在运行时会收到此错误
`node server.js'
然后从前端向我的快速js后端发出请求