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

问题描述 投票:3回答:1

我正在学习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中读取令牌。

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

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

javascript node.js passport.js spotify
1个回答
0
投票

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

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的包装器,您可以在其中传入令牌,包装器会自动将您的访问令牌作为标头包含在您发出的每个请求中。

© www.soinside.com 2019 - 2024. All rights reserved.