oauth-2.0 Discord API -传回生成的OAuth2代码时出现随机“无效代码”错误

pcrecxhr  于 2022-10-31  发布在  其他
关注(0)|答案(2)|浏览(269)

我已经成功地在我的应用程序中使用授权代码授权类型实现了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。评论,如果我收到任何有用的信息或完全解决这个问题(希望是这样),我将在这里更新。

esyap4oy

esyap4oy1#

您是否使用OAuth2链接以正确的权限邀请您的机器人到您的服务器?如果是,您是否在main.js文件中定义了令牌?I.e. bot.login(“YOUR_TOKEN_HERE”)我建议不要切换“需要OAuth2代码授权”,因为一开始做任何事情都很痛苦。请让我知道任何进展:)

55ooxyrt

55ooxyrt2#

在使用nodej时遇到了同样的问题。

  • 在节点上,如果没有显式的app.head()处理程序,则.post()处理程序将接收所有head请求
  • 几个Android手机在从discord重定向时,首先向端点发送head请求

含义:

  • 用户在discord上进行身份验证,然后通过redirect back进行head请求,这会导致代码不一致,但是紧接着它也会进行post请求,这会失败(因为您已经使用过一次代码),并且可能会取消对用户的身份验证。

我的具体问题的解决方案是为所有回调端点提供一个显式的.head处理程序,它基本上只是返回与post处理程序相同的头(重定向),但不会引起不和谐。
希望这对你有帮助。

相关问题