Oauth 2.0 不一致的Oauth2接收';无效的客户端';错误

Oauth 2.0 不一致的Oauth2接收';无效的客户端';错误,oauth-2.0,discord,Oauth 2.0,Discord,我实现了Discord Oauth2,这样我的用户就可以通过Discord进行身份验证来登录我的网站。几个月来,一切都很顺利,现在突然停止了 根据Discord的oauth2指令,我能够成功获取用于交换访问令牌的访问代码。但是,当我尝试接收访问令牌时,我收到一个“invalid_client”错误 首先,我要达到这个终点: https://discordapp.com/api/oauth2/authorize?client_id=${process.env.CLIENT_ID}&redi

我实现了Discord Oauth2,这样我的用户就可以通过Discord进行身份验证来登录我的网站。几个月来,一切都很顺利,现在突然停止了

根据Discord的oauth2指令,我能够成功获取用于交换访问令牌的访问代码。但是,当我尝试接收访问令牌时,我收到一个“invalid_client”错误

首先,我要达到这个终点:

https://discordapp.com/api/oauth2/authorize?client_id=${process.env.CLIENT_ID}&redirect_uri=http%3A%2F%2Flocalhost%3A5000%2Flogin%2Fdiscord%2Fcallback&response_type=code&scope=identify%20email%20gdm.join
它将成功返回以下内容:

http://localhost:5000/login/discord/callback?code={some_access_code}
然后将访问代码发送回discord以获取访问令牌。以下是失败的代码:

export function getDiscordAccessToken(accessCode, call) {
  const redirect = call === 'login' ? process.env.DISCORD_LOGIN_REDIRECT : process.env.DISCORD_CONNECT_REDIRECT


  return new Promise((resolve, reject) => {

    axios
      .post(
        `https://discordapp.com/api/oauth2/token?client_id=${process.env.DISCORD_CLIENTID}&client_secret=${process.env.DISCORD_SECRET}&grant_type=authorization_code&code=${accessCode}&redirect_uri=${redirect}&scope=identify%20email%20gdm.join`
    )
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        // log error to db
        console.log("Here is your error: ", err.response)
        reject(err.response)
      })
  })
}
这段代码运行了几个月,没有任何问题。然后,它突然停止了工作。我甚至检查了可以在这里找到的Discord更改日志,但是我没有发现任何关于身份验证更改的引用


非常感谢您提供的任何帮助

查询参数应该在POST请求的主体中,而不是
oauth/token
URL的URL

Discord最近对oAuth2进行了更新,使其更符合标准。这意味着它们不再支持POST URL中的参数,而是要求它们在正文和表单编码中(基本相同,但在正文中,没有前导的

因此,您基本上需要(未经测试):

axios
.邮政(
"https://discordapp.com/api/oauth2/token",       
“客户端\u id=${process.env.DISCORD\u CLIENTID}和客户端\u secret=${process.env.DISCORD\u secret}&grant\u type=client\u凭证和代码=${accessCode}&redirect\uri=${redirect}&scope=identification%20email%20gdm.join”
)

真管用!我觉得不和谐改变了什么…你帮我省了很多浪费的时间。仅供参考,我唯一不同的做法是添加一个配置对象,其标题设置为application/x-www-form-urlencoded