【问题标题】:Node.js Express Spotify API save in sessionNode.js Express Spotify API 保存在会话中
【发布时间】:2020-05-22 09:25:42
【问题描述】:
【问题讨论】:
标签:
node.js
express
spotify
session-state
【解决方案1】:
解决方案是在成功验证后将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 端点。这种技术可以防止混乱和混乱,因此每个用户只能查看和操作他的数据。