我正在尝试使用Node.js和Spotify Web API Node的Client 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()
。
我认为这是相当简单的,但我必须在某个地方犯一个简单的错误。有没有人成功使用过这种方法?或者之前有人遇到过此错误?我有更好的方法吗?
答案 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);
});
}
可能是骇客,但对我有用。