Node.js Express Spotify API保存在会话中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js Express Spotify API保存在会话中相关的知识,希望对你有一定的参考价值。

在将Spotify API集成到Nodejs Express Web应用程序中时出现了问题。spotify-web-api-node. 多个用户同时请求应该如何处理?通过认证步骤后,用户收到 access_token,这对每个用户来说都是不同的。每个请求都可以有一个会话,例如使用 express-session 自从 access_token 对每个认证用户来说是唯一的。奇怪的是,我在描述和样本中找不到一个正确使用会话的例子。https:/www.npmjs.compackagespotify-web-api-node 哪儿 spotify-web-api-node 被使用。没有session怎么可能使用全局变量?会不会在不同的用户请求之间造成完全的混乱,或者我漏掉了什么?我猜想 access_token 将总是被最新认证的用户所取代。另一个使用例子在这里 https:/github.comthelinmichaelspotify-web-api-node。虽然它也建议使用一个全局实例。

答案

解决方法是存储 access_tokenrefresh_token 成功认证后在会话中存储,比之前调用Spotify API端点为当前用户从当前会话中设置两个代币。

在成功认证后将令牌保存在会话中。

app.get('/login', (req,res) => {
  var scopes = [ ... ]
  var authUrl = spotifyApi.createAuthorizeURL(scopes)
  res.redirect(authUrl+"&show_dialog=true")
})

app.get('/callback', async (req, res) => {
  const { code } = req.query
  try {
    var data = await spotifyApi.authorizationCodeGrant(code)
    const { access_token, refresh_token } = data.body
    spotifyApi.setAccessToken(access_token)
    spotifyApi.setRefreshToken(refresh_token)

    req.session.spotifyAccount = { access_token, refresh_token }

    res.redirect('...')
  } catch(err) {
    res.send(`error ${err}`)
  }
});

app.get('/userinfo', async (req,res) => {
  try {
    spotifyApi.setAccessToken(req.session.spotifyAccount["access_token"])
    spotifyApi.setRefreshToken(req.session.spotifyAccount["refresh_token"])
    var result = await spotifyApi.getMe()
    console.log(result.body);
    res.status(200).send(result.body)
  } catch (err) {
    res.status(400).send(err)
  }
});

access_token 是唯一标识任何API请求的识别键,它确保API端点是为当前用户调用的。这种技术可以防止混乱和混淆,使每个用户只能看到和操作他的数据。

以上是关于Node.js Express Spotify API保存在会话中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Express 构建“客户端凭据流”以授权使用 Spotify API?

Node.js 手册查询-4-Express 方法

Spotify API Web:没有 Node.js 的 OAuth

node.js 函数调用顺序,Spotify Web API

基于node.js的web框架express

Node.js连接Mysql,并把连接集成进Express中间件中