我已经成功地在我的应用程序中使用授权代码授权类型实现了Discord的OAuth2流程。最终用户导航到我的bot的Discord的OAuth2链接,授权其访问,Discord使用code
querystring将它们重定向回我的站点。然后,bot通过查询Discord的API将此代码交换为访问令牌。有关此过程的文档可供参考here。
然而,**大约每50-100个请求到exchange端点,我就会收到一个403,错误为invalid_grant
,描述为Invalid "code" in request.
**坦白地说,我不明白Discord系统刚刚提供的代码是如何立即无效的。同一个用户可以再次完成这个过程,第二次不会返回错误。
出于绝望,我试着打开开发者控制面板中名为Requires OAuth2 Code Grant
的选项,看到它说“如果您的应用程序需要多个作用域”,但它没有任何效果。我也试过无数次调试,但每次出现的情况显然是随机的。奇怪的是,我在网上找不到任何有同样问题的人。
下面是我在Node.js中使用superagent库所做的请求,它与文档匹配,工作正常,只是响应随机出现了所描述的错误。
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
查询字符串的值。
我做错了什么(如果有的话)导致了错误?
更新1:
Discord已经将我引导到API GitHub repo,我发现这个问题已经关闭here。评论,如果我收到任何有用的信息或完全解决这个问题(希望是这样),我将在这里更新。
2条答案
按热度按时间esyap4oy1#
您是否使用OAuth2链接以正确的权限邀请您的机器人到您的服务器?如果是,您是否在main.js文件中定义了令牌?I.e. bot.login(“YOUR_TOKEN_HERE”)我建议不要切换“需要OAuth2代码授权”,因为一开始做任何事情都很痛苦。请让我知道任何进展:)
55ooxyrt2#
在使用nodej时遇到了同样的问题。
含义:
我的具体问题的解决方案是为所有回调端点提供一个显式的.head处理程序,它基本上只是返回与post处理程序相同的头(重定向),但不会引起不和谐。
希望这对你有帮助。