我已经使用授权码授予类型成功地实现了Discord的OAuth2流到我的应用程序中。最终用户导航到我的机器人的Discord的OAuth2链接,授权其访问,然后Discord使用code
查询字符串将其重定向回我的网站。然后,机器人通过查询Discord的API将此代码交换为访问令牌。有关此过程的文档可供参考here。
但是,大约每50-100个向交换端点的请求,我收到一个403,错误invalid_grant
和描述Invalid "code" in request.
坦白地说,我不明白Discord系统刚刚提供的代码如何立即无效。同一用户可以再次完成该过程,第二次没有错误返回。
[出于绝望,我尝试在开发人员仪表板中的名为Requires OAuth2 Code Grant
的选项上切换,看到它说“如果您的应用程序需要多个作用域”,但它没有任何效果。我还联系了Discord支持人员,后者选择使用“超出范围”的借口,不提供任何帮助。我也尝试了无尽的调试,但是每次出现的情况显然都是随机的。奇怪的是,我在网上找不到任何人遇到同样的问题。
以下是我使用superagent库在Node.js中发出的请求。它与文档相符,并且运行正常,除了响应是随机描述的错误之外。
superagent.post('https://discordapp.com/api/v6/oauth2/token')
.type('x-www-form-urlencoded')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send({
client_id: process.env.BOT_ID,
client_secret: process.env.BOT_SECRET,
grant_type: 'authorization_code',
code,
redirect_uri: process.env.OAUTH2_REDIRECT_URI,
scope: 'identify guilds.join',
});
我可以确认所有变量都与它们的期望值匹配。 redirect_uri
的值与使用的原始URL中的redirect_uri
的值匹配。 code
是通过OAuth2流返回的code
查询字符串的值。
导致错误的我在做错什么(如果有的话?)>
我已经使用授权码授予类型成功地实现了Discord的OAuth2流到我的应用程序中。最终用户导航到我的机器人的Discord的OAuth2链接,授权其访问,然后...
您是否使用OAuth2链接邀请您的漫游器访问服务器-拥有正确的权限?如果是这样,您是否在main.js文件中定义了令牌?即bot.login(“ YOUR_TOKEN_HERE”)我建议不要切换“需要OAuth2代码授权”,因为一开始做任何事情都是很痛苦的。请让我知道任何进展:)