Javascript NodeJS+;Passport,检索访问令牌(Spotify API)
我正在学习Node.js,并使用Spotify API编写一个非常简单的web应用程序(创建播放列表) 具体来说,我一直在使用这个包,并将提供的作为起点 我能够在应用程序中进行正常的API调用,因为它们不需要任何用户身份验证,但是我现在需要发出请求并提供访问令牌Javascript NodeJS+;Passport,检索访问令牌(Spotify API),javascript,node.js,passport.js,spotify,Javascript,Node.js,Passport.js,Spotify,我正在学习Node.js,并使用Spotify API编写一个非常简单的web应用程序(创建播放列表) 具体来说,我一直在使用这个包,并将提供的作为起点 我能够在应用程序中进行正常的API调用,因为它们不需要任何用户身份验证,但是我现在需要发出请求并提供访问令牌 app.get('/playlist/:name', function(req, res){ var options = { url: 'spotify api link, cannot post without more rep
app.get('/playlist/:name', function(req, res){
var options = {
url: 'spotify api link, cannot post without more reputation',
headers : {
'Accept': 'application/json',
'Authorization': 'Bearer ' + accessToken,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: req.params.name,
public: false
})
};
request.post(options, function(error, response, body){
console.log(error);
console.log(response);
console.log(body);
})
});
我以前的调用显然是应用程序公共脚本中非常简单的ajax请求,但现在我需要访问令牌,我遇到了一些障碍
到目前为止,我已经想到/尝试了两种方法,它们如下:
- 将Passport检索到的访问令牌(看起来是刷掉的)存储为cookie,然后在公共javascript中访问该cookie,就像我在其他API调用中所做的那样。我不确定这个方法的安全性。无论哪种方式,我都不知道如何将其设置为cookie,因为这需要
,并且res.cookie()
不会传递到函数中res
- 创建一个新路由,当使用ajax请求时,该路由将触发一个基于节点的api请求,这样访问令牌将保持隐藏状态。下面是我的想法。我确实收到了一个似乎表明该想法有效的响应,但我不知道如何检索访问令牌
app.get('/playlist/:name', function(req, res){ var options = { url: 'spotify api link, cannot post without more reputation', headers : { 'Accept': 'application/json', 'Authorization': 'Bearer ' + accessToken, 'Content-Type': 'application/json' }, body: JSON.stringify({ name: req.params.name, public: false }) }; request.post(options, function(error, response, body){ console.log(error); console.log(response); console.log(body); }) });
app.get('/callback')…
,在我上面提到的示例中。然后,我可以通过cookie读取公共javascript中的令牌
我应该说,我不确定这是否是最好(或最安全)的方法,但它对我的目的起了作用。我假设为令牌创建一个全局变量是不好的,但我不确定
如果有人看到我的解决方案并注意到一个问题或更好的方法,我仍然有兴趣听到这一点 使用访问令牌和刷新令牌调用passport配置的回调函数
passport.use(
new SpotifyStrategy(
{
clientID: client_id,
clientSecret: client_secret,
callbackURL: 'http://localhost:8888/auth/spotify/callback'
},
function(accessToken, refreshToken, expires_in, profile, done) {
User.findOrCreate({ spotifyId: profile.id }, function(err, user) {
return done(err, user);
});
}
)
);
您可以将该访问令牌和刷新令牌存储在数据库中。如果应用程序使用授权代码流,则可以在数据库中查找或创建用户,并将这两个令牌存储在该用户对象中。然后,您可以提取此令牌并在您的请求中使用它
我建议看一看。这是Spotify API的包装器,您可以在其中传递令牌,包装器将自动将您的访问令牌作为您发出的每个请求的头