查询 Spotify 的 Web API 客户端凭证流

我正在尝试根据https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow Client Credentials Flow上的文档发出 http 请求。

我写过

const BASE_URL = 'https://accounts.spotify.com/api/token';

fetch(BASE_URL, {

            method: 'POST',

            headers: {

                'Content-Type': 'application/x-www-form-urlencoded',

                'Authorization': 'Basic ' + base64(clientID) + ':' + base64(clientSecret)

            },

            body: JSON.stringify({'grant_type:client_credentials'})

        })

这是否按照它所说的去做?我很困惑如何编写发布请求的正文。


阿波罗的战车
浏览 227回答 3
3回答

莫回无

我最终做了哪些工作:async authorize(){        let myHeaders = new Headers();        myHeaders.append("Authorization", `Basic ${my_clientID:clientSecret}`);        myHeaders.append("Content-Type", "application/x-www-form-urlencoded");        var urlencoded = new URLSearchParams();        urlencoded.append("grant_type", "client_credentials");        const requestOptions = {        method: 'POST',        headers: myHeaders,        body: urlencoded,        redirect: 'follow'        }                let res = await fetch("https://accounts.spotify.com/api/token", requestOptions);        res = await res.json();        return res.access_token;     }async search(){        const access_token = await this.authorize();        this.setState({access_token});        const BASE_URL = 'https://api.spotify.com/v1/search';        let FETCH_URL = `${BASE_URL}?q=${this.state.query}&type=artist&limit=1`;         const ALBUM_URL = 'https://api.spotify.com/v1/artists';        let myHeaders = new Headers();        myHeaders.append("Authorization", `Bearer ${access_token}`);                const requestOptions = {            method: 'GET',            headers: myHeaders        }        let res = await fetch(FETCH_URL, requestOptions);        res = await res.json();        console.log("ARTIST", res);}

明月笑刀无情

从您共享的链接中,客户端凭证流是向 spotify API 服务器发出请求的客户端(服务器端)。因此,这是一个服务器到服务器的身份验证流程(不是授权)。您正在使用客户端的 fecth API,这意味着您的实现应该是服务器端的。如果您使用的是 node.js 运行时服务器端框架,只需查找即可在http.request API服务器端发出请求。例如,这将是一个纯 node.js 实现:const options = {   hostname: 'https://accounts.spotify.com/api/token',   method: 'POST',   headers: {     'Content-Type': 'application/x-www-form-urlencoded',     'Authorization': 'Basic ' + base64(clientID) + ':' + base64(clientSecret)   } }; const req = http.request(options, (res) => {   res.setEncoding('utf8');   // process the data bit by bit or in chunks...   res.on('data', (chunk) => {});   // ...and do something with it when there is no more data in response   res.on('end', () => {    console.log('No more data in response.');   }); });  // handle the error explicitly req.on('error', (e) => {   console.error(`problem with request: ${e.message}`); }); req.end();

江户川乱折腾

对我来说,我不确定其他人是否也是这种情况,但 spotify api 拒绝base64(clientID) + ":" + base64(clientKey),但接受base64(clientID + ":" + clientKey)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript