繁体   English   中英

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

[英]NodeJS + Passport, retrieving an access token (Spotify API)

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

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

我已经能够在应用程序中进行正常的 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。 检索访问令牌似乎应该很容易,所以也许我的处理方式完全错误。

谢谢阅读!

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

我应该说我不确定这是否是最好(或最安全)的方法,但它对我的目的有效。 我认为为令牌创建全局变量不好,但我不确定。

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

使用访问令牌和刷新令牌调用通行证配置的回调函数。

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);
      });
    }
  )
);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM