我在使用OAuth2授权码授权获取Discord的访问令牌时遇到了问题。通过从我的web应用程序发送以下请求,我能够成功获取令牌:
const params = `client_id=${clientId}&client_secret=${clientSecret}&grant_type=authorization_code&code=${code}&redirect_uri=${redirect_uri}&response_type=code&scope=identify`;
fetch(`${apiUrl}/oauth2/token`, {
method: 'POST',
body: params,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
}).then(response => {
console.log(response);
return response.json();
}).then(json => {
console.log(json);
}).catch(e => {
console.log(`ERROR: ${e}`);
});
为了向我的Firebase应用程序注册我的用户,我按照回答this question中概述的步骤通过云函数请求访问令牌,下一步是创建一个自定义令牌,然后使用signInWithCustomToken
向我的应用程序验证用户身份。
然而,当我在我的云函数中运行完全相同的代码片段时,我从Discord的OAuth2服务器得到的响应是:
{
error: 'invalid_request',
error_description: 'Invalid "code" in request.'
}
我不确定这是什么意思。除非我遗漏了什么,否则我在两个请求中传递的code
参数是相同的,我已经通过记录和比较两个请求确认了这一点。我认为这可能与运行函数的位置(某个谷歌服务器)有关,但我认为这应该没问题,因为我的client_id
和client_secret
是一样的?
发布于 2019-07-29 01:45:30
明白了。
结果是我发送了两次访问令牌交换请求(一次来自客户端,一次来自云函数),这导致云函数总是最后发送请求,并且由于第二个请求重用了第一个请求中的授权码,因此它被认为是无效的。
https://stackoverflow.com/questions/57242935
复制相似问题