NodeJS + Passport,检索访问令牌(Spotify API)

时间:2015-08-18 18:41:02

标签: javascript node.js passport.js spotify

我正在学习Node.js,并使用Spotify API编写一个非常简单的Web应用程序(创建一个播放列表)。

具体来说,我一直在使用passport-spotify包,并使用提供的example作为起点。

我已经能够在应用程序中进行正常的API调用,因为它们不需要任何用户身份验证,但我现在需要发出请求并提供访问令牌。

我以前的电话显然是应用程序的公共脚本中非常简单的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);
    })
    
    });
    

原谅我在这方面缺乏知识 - 这是我第一次深入研究后端开发和OAuth。检索访问令牌似乎应该很容易,所以也许我会以错误的方式解决它。

感谢阅读!

在任何人都有同样问题的情况下更新: 我通过为访问令牌创建一个全局变量,在它通过应用程序时分配它,然后在回调阶段从它创建一个cookie - 我在上面提到的例子中app.get('/callback')...解决了这个问题。然后,我可以通过该cookie在我的公共JavaScript中读取令牌。

我应该说我不确定这是否是最好(或最安全)的方法,但它对我的目的有效。我假设为令牌做一个全局变量并不好,但我不确定。

如果有人看到我的解决方案并注意到问题或更好的方法,我仍然有兴趣听到这个。

1 个答案:

答案 0 :(得分:0)

使用访问令牌和刷新令牌调用护照配置的回调函数。

SELECT MAX(aa) AS max 
FROM 
    (SELECT SUM(budget) AS aa 
     FROM dept 
     GROUP BY managerId) dept

您可以在数据库中存储该访问令牌和刷新令牌。如果您的应用程序使用授权代码流,则可以在数据库中查找或创建一个用户,并将两个令牌存储在该用户对象中。然后,您可以选择此令牌并在您的请求中使用它。

我建议您看看https://github.com/thelinmichael/spotify-web-api-node。这是Spotify API的包装,您可以在其中传递令牌,包装将自动将您的访问令牌作为标头包含在您提出的每个请求中。