javascript 使用Fetch进行Spotify客户端凭据验证

qq24tv8q  于 2023-02-21  发布在  Java
关注(0)|答案(2)|浏览(137)

如何使用fetch获取spotify API令牌?
spotify网站有这样一个例子:

var client_id = 'CLIENT_ID';
var client_secret = 'CLIENT_SECRET';

var authOptions = {
  url: 'https://accounts.spotify.com/api/token',
  headers: {
    'Authorization': 'Basic ' + (new Buffer(client_id + ':' + client_secret).toString('base64'))
  },
  form: {
    grant_type: 'client_credentials'
  },
  json: true
};

request.post(authOptions, function(error, response, body) {
  if (!error && response.statusCode === 200) {
    var token = body.access_token;
  }
});

是否可以转换为fetch?如果可以,如何转换?

sgtfey8w

sgtfey8w1#

未使用真实的凭据进行测试,但应该可以工作:

var client_id = 'CLIENT_ID';
var client_secret = 'CLIENT_SECRET';

fetch('https://accounts.spotify.com/api/token', {
    method: 'POST',
    body: 'grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
})
.then(r => r.json())
.then(r => {
    console.log(r.access_token)
})

你也可以用new FormData()来代替urlencoded生成表单数据。

slwdgvem

slwdgvem2#

“mmm107”的解决方案奏效了。
下面是另一种看起来更熟悉的方法,它使用fetch,并使用与client credentials documentation类似的一组请求选项。
主要区别在于在标头中添加了'Content-Type'选项,并将form对象属性替换为body字符串属性。

const client_id = require('./keys.js').client_id; // Your client id
const client_secret = require('./keys.js').client_secret; // Your secret

// get authorisation token from Spotify
async function getSpotifyToken() {
    const url = 'https://accounts.spotify.com/api/token';
    response = await fetch(url, {
        method: 'POST',
        headers: {
            'Authorization': 'Basic ' + (Buffer.from(client_id + ':' + client_secret).toString('base64')),
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: 'grant_type=client_credentials',
        json: true
    });
    if (response.ok) {
        const jsonResponse = await response.json();
        console.log(jsonResponse);
    } else {
        console.log(response.statusText);
        throw new Error(`Request failed! Status code: ${response.status} ${response.statusText}`);
    }
}

getSpotifyToken()

相关问题