仅使用客户端凭据获取Spotify访问令牌(Spotify Web API节点)

时间:2018-03-29 03:22:12

标签: node.js spotify

我正在尝试使用Node.js和Spotify Web API NodeClient Credential flow获取Spotify访问令牌(仅包含客户端ID和客户端密钥)。这是我的代码:

var SpotifyWebApi = require('spotify-web-api-node');

var spotifyApi = new SpotifyWebApi({
  clientId : clientId, // my Client ID
  clientSecret : clientSecret // my Client Secret
});

spotifyApi.clientCredentialsGrant()
  .then(function(data) {
    spotifyApi.setAccessToken(data.body['access_token']);
  }, function(err) {
    console.log('Something went wrong when retrieving an access token', err);
  });

我遇到的问题是我总是遇到以下错误:

TypeError: spotifyApi.clientCredentialsGrant is not a function

我可以从这个库中访问许多其他功能,没有任何问题。例如,我可以写:

console.log(`The Client secret is ${spotifyApi.getClientSecret()}`);
console.log(`The Client ID is ${spotifyApi.getClientId()}`);

我在控制台中得到了预期的输出:

The Client secret is [my Client Secret]
The Client ID is [my Client ID]

有趣的是,通过使用WebStorm的代码完成,我可以看到许多其他可用的方法。事实上,我可以看到88种方法(甚至超过列出的here),但该列表中也缺少clientCredentialsGrant()

我认为这是相当简单的,但我必须在某个地方犯一个简单的错误。有没有人成功使用过这种方法?或者之前有人遇到过此错误?我有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

出于安全原因,您必须在服务器端使用此授权流程。 显然,这是为了避免您在应用程序上使用您的秘密令牌,每个人都可以阅读代码。 看看这个:https://github.com/thelinmichael/spotify-web-api-node#authorization

答案 1 :(得分:0)

该问题的快速解决方案是将其包装在if语句中,以同时检查spotifyApi和clientCredentialsGrant函数:

var SpotifyWebApi = require('spotify-web-api-node');
var spotifyApi = new SpotifyWebApi({
  clientId : clientId, // my Client ID
  clientSecret : clientSecret // my Client Secret
});

// insert this line
if (spotifyApi & spotifyApi.clientCredentialsGrant) {
spotifyApi.clientCredentialsGrant()
  .then(function(data) {
    spotifyApi.setAccessToken(data.body['access_token']);
  }, function(err) {
    console.log('Something went wrong when retrieving an access token', err);
  });
}

可能是骇客,但对我有用。