我正在尝试通过其Twitch登录名对我的应用程序上的用户进行身份验证。我似乎不request.post()
正确(使用请求承诺)。我尝试了许多不同的变体,并且通常在服务器日志中得到“未处理的拒绝”。此抽搐API指南是在这里。POST响应应为JSON。这是我的最新版本:
const twitchATParams =
'?client_id=' + twitchAppClientId +
'&client_secret=' + twitchClientSecret +
'&code=' + code +
'&grant_type=authorization_code' +
'&redirect_uri=' + twitchAppRedirect;
request.post(twitchATRequestUrl + twitchATParams)
.then((accessTokenResponse) => {
const accessToken = accessTokenResponse.access_token;
console.log('Got an access token: ' + accessToken);
res.status(200).send('Got an access token: ' + accessToken);
})
.catch((error) => {
res.status(error.statusCode).send(error.error.error_description);
});
我也尝试过这个:
request.post({
url: twitchATRequestUrl,
form: { client_id: twitchAppClientId,
client_secret: twitchClientSecret,
code: code,
grant_type: "authorization_code",
redirect_uri: twitchAppRedirect}
}, function(error, accessTokenResponse, body){
const accessToken = accessTokenResponse.access_token;
console.log('Got an access token: ' + accessToken);
res.status(200).send('Got an access token: ' + accessToken);
});
这就是Twitch API指南所说的,我想我很难将其转换为JavaScript:
POST https://id.twitch.tv/oauth2/token
?client_id=<your client ID>
&client_secret=<your client secret>
&code=<authorization code received above>
&grant_type=authorization_code
&redirect_uri=<your registered redirect URI>
更新:该应用程序使用Cloud Functions托管在Firebase上。也许这影响了我的要求?
更新2:据此:部署的Firebase功能无法对外部API执行HTTP GET?我只能在Firebase付费计划中提出外部API请求。我假设这是我的问题。我将升级到“按需付费”计划(实际上免费提供了许多数据),然后重试一次并将结果发布在这里。
解决了。事实证明,我确实需要付费计划(Blaze,即付即用)来访问外部API。我升级了,基本上解决了这个问题。它使我看到了一个新的错误代码:StatusCodeError: 400 - "{\"status\":400,\"message\":\"Parameter redirect_uri does not match registered URI\"}
因此我发现我的代码中的重定向URL缺少“ / callback”(Twitch应用程序管理设置上的OAuth重定向URL的末尾带有“ / callback”)。
我还能够使用以下两个代码块成功获取访问令牌:
const twitchTokenPayload = {
client_id: twitchAppClientId,
client_secret: twitchClientSecret,
code: code,
grant_type: 'authorization_code',
redirect_uri: twitchAppRedirect,
};
request.post(twitchATRequestUrl, { json: twitchTokenPayload })
.then((accessTokenResponse) => {
const accessToken = accessTokenResponse.access_token;
console.log('Got an access token: ' + accessToken);
res.status(200).send('Got an access token: ' + accessToken);
})
.catch((error) => {
console.log('Caught error: ' + error.error.error_description);
res.status(error.statusCode).send(error.error.error_description);
});
这也起作用:
request.post({
url: twitchATRequestUrl,
form: { client_id: twitchAppClientId,
client_secret: twitchClientSecret,
code: code,
grant_type: "authorization_code",
redirect_uri: twitchAppRedirect}
}, function(error, response, body){
console.log(JSON.parse(body));
const jsonStuff = JSON.parse(body);
const accessToken = jsonStuff.access_token;
console.log('Got an access token: ' + accessToken);
res.status(200).send('Got an access token: ' + accessToken);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句