对Spotify API的Angular Http POST请求 - Access-Control-Allow-Origin

时间:2017-04-15 15:03:57

标签: angular spotify

我正在构建一个连接到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

0 个答案:

没有答案