我正在构建一个连接到Spotify API的Angular 2应用。我正在尝试使用我在授权应用程序时收到的refresh_token刷新应用程序的访问令牌,我正在使用角度Http模块将其传递给API端点但我遇到了Access-Control-Allow - 原始错误。如果我使用像Postman这样的工具,我可以拨打相同的电话并且工作正常,所以我认为我的应用设置中有些东西不正确,但无法找到答案。
使用Quickstart种子设置Angular,该种子使用webpack创建本地服务器。我对API的不同端点进行其他调用,并且工作正常,例如检索用户播放列表。我看到这些调用的第一个区别是它们是GET请求,而我试图得到的令牌是一个POST。
我获取新代码的功能如下:
refreshAccessToken(): string {
var newCode: string;
var refresher = 'private_refresh_token';
var endpoint = 'https://accounts.spotify.com/api/token';
var encodedClientDetails = btoa(this.appClientID + ':' + this.appClientSecret);
var header = new Headers({
'Authorization': 'Basic ' + encodedClientDetails
});
var options = new RequestOptions({
headers: header,
body: {
'grant_type': 'refresh_token',
'refresh_token': refresher
}
});
this.http.post(endpoint, options)
.toPromise()
.then(res => newCode = res.statusText.toString());
return newCode;
}
Chrome's dev console image with the error
我使用了本文档中提供的详细信息: https://developer.spotify.com/web-api/authorization-guide/
我在Postman中使用的cURL代码(并且运行正常!)是:
curl -X POST \
https://accounts.spotify.com/api/token \
-H 'authorization: Basic <base64 encoded client_id:client_secret>' \
-H 'cache-control: no-cache' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'postman-token: 13e6247a-b3a1-668f-bb5a-ea421bebe287' \
-d 'grant_type=refresh_token&refresh_token=NgAagA...NU'
在Chrome开发工具的网络详细信息中,我可以看到请求属于OPTION类型,状态为204