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_token
和 refresh_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?
Spotify API Web:没有 Node.js 的 OAuth