【发布时间】:2015-11-11 20:31:32
【问题描述】:
我正在学习 Node.js,并使用 Spotify API 编写一个非常简单的网络应用程序(创建播放列表)。
具体来说,我一直在使用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 中读取令牌。
我应该说我不确定这是否是最好(或最安全)的方法,但它对我的目的有效。我认为为令牌制作一个全局变量并不好,但我不确定。
如果有人看到我的解决方案并注意到一个问题或更好的方法,我仍然很想听听。
【问题讨论】:
标签: javascript node.js passport.js spotify