【发布时间】:2020-07-07 17:31:51
【问题描述】:
我已经在我的应用程序中使用授权码授权类型成功实现了 Discord 的 OAuth2 流程。最终用户导航到我的机器人的 Discord 的 OAuth2 链接,授权其访问,然后 Discord 使用 code 查询字符串将它们重定向回我的站点。然后,机器人通过查询 Discord 的 API 将此代码交换为访问令牌。可通过here 获取有关此过程的文档以供参考。
但是,大约每 50-100 个交换端点请求,我都会收到一个 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 存储库,我发现该问题已关闭 here。如果我收到任何有用的信息或完全解决问题(希望如此),已发表评论并将在此处更新。
【问题讨论】: