如何获取隐式授权流程access_token

时间:2018-02-06 14:55:35

标签: spotify

我正在使用隐式授权流程。问题是在用户授予访问权限后,我无法接受重定向到redirect_uri之间的响应。我怎么知道授予访问权限?以及如何获取access_token的值?

2 个答案:

答案 0 :(得分:1)

以下是如何实现隐式授权流程的完整代码示例:

// Get the hash of the url
const hash = window.location.hash
.substring(1)
.split('&')
.reduce(function (initial, item) {
  if (item) {
    var parts = item.split('=');
    initial[parts[0]] = decodeURIComponent(parts[1]);
  }
  return initial;
}, {});
window.location.hash = '';

// Set token
let _token = hash.access_token;

const authEndpoint = 'https://accounts.spotify.com/authorize';

// Replace with your app's client ID, redirect URI and desired scopes
const clientId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
const redirectUri = 'http://localhost:8888';
const scopes = [
  'user-read-birthdate',
  'user-read-email',
  'user-read-private'
];

// If there is no token, redirect to Spotify authorization
if (!_token) {
  window.location = `${authEndpoint}?client_id=${clientId}&redirect_uri=${redirectUri}&scope=${scopes.join('%20')}&response_type=token`;
}

它抓取URL的哈希值并检查访问令牌。如果不存在,则重定向到Spotify授权。

这是一个Glitch示例,您可以重新混音以开始使用:https://glitch.com/~spotify-implicit-grant

答案 1 :(得分:0)

access_token将位于重定向网址的url hash

redirect_uri#access_token=

后跟访问令牌。

要获取access_token,您只需拥有您设置的页面,因为您的redirect_uri会解析网址并获取哈希值。以下js应该这样做:

function parseURLHash () {
    var search = location.hash.substring(1);
    var urlHash = search?JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g,'":"') + '"}',
                     function(key, value) { return key===""?value:decodeURIComponent(value) }):{}
    return urlHash;
}
urlHash = parseURLHash();
var authToken = urlHash.access_token;