javascript - Spotify API 节点 - 错误的会话
问题描述
我目前遇到多个用户在我的网络应用程序上看到错误内容的问题。所以,user A
会登录并查看他们的详细信息,然后user B
会登录并查看他们的详细信息,这很好。但是当user A
刷新页面时,他们会看到user B's
详细信息。user A's
即使刷新(user B
之后仍然登录),我如何让它保留详细信息?
这是我目前拥有的:
var express = require('express');
var SpotifyWebApi = require('spotify-web-api-node');
var path = require('path');
var chartify = require('./app.js');
var cookieParser = require('cookie-parser');
var app = express();
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname + '/views'));
app.use(express.static(__dirname + '/views')).use(cookieParser());
var port = process.env.PORT || 8000;
var client_id = '';
var client_secret = '';
var redirect_uri = '';
var stateKey = 'spotify_auth_state';
var spotifyApi = new SpotifyWebApi({
clientId: client_id,
clientSecret: client_secret,
redirectUri: redirect_uri
});
app.get('/', function(req, res) {
res.render('index');
});
app.get('/login', function(req, res){
var state = chartify.generateRandomString(16);
var scope = ['user-top-read'];
res.cookie(stateKey, state);
var authorizeURL = spotifyApi.createAuthorizeURL(scope, state)
res.redirect(authorizeURL);
});
app.get('/callback', function(req, res) {
var state = req.query.state || null;
var storedState = req.cookies ? req.cookies[stateKey] : null;
if (state == null || state != storedState) {
res.redirect('/#/state-mismatch');
} else {
res.clearCookie(stateKey);
spotifyApi.authorizationCodeGrant(req.query.code).then(function(data) {
spotifyApi.setAccessToken(data.body.access_token);
spotifyApi.setRefreshToken(data.body.refresh_token);
res.redirect('/details');
});
}
});
app.get('/details', function(req, res) {
var access_token = spotifyApi.getAccessToken()
if (access_token == undefined || null) {
res.redirect('/')
return;
}
//do things
res.render('template.ejs')
});
app.listen(port, function() {
console.log('APP LISTENING ON PORT 8000.');
});
解决方案
每个用户都有自己的access_token
,但是当他们访问/details
您时,您只需获得在您的服务器端spotifyApi
using实例上设置的最后一个 access_token spotifyApi.getAccessToken()
。
因此,如果用户 A 登录,然后用户 B 登录,用户 A 确实会看到用户 B 的详细信息,因为/details
正在使用spotifyApi
仍然具有access_token
用户 B的实例进行调用。
您需要有一种方法来区分哪个用户正在调用/details
并使用适当的令牌。最简单的方法是让客户端知道他们自己的令牌并让他们在请求中将其发送到您的服务器。
推荐阅读
- bulkinsert - 选择瓶颈并插入选择在蟑螂数据库上不起作用
- mongodb - 在 mongodb 查询中按日期从 ISODate 分组
- git - Git:显示“假定未更改”文件
- python - 需要计算时间戳之间的时间差并将其存储在变量中
- amazon-web-services - AWS AppSync 响应排序结果?
- php - CodeIgniter 会话被破坏
- html - 我们可以在同一个 div 中使用 row 和 col-md-12 吗?还是应该在父子div中?
- r - R中的自动绘图功能和绘图功能有什么区别
- php - 问:ReactJS 的后端
- python - MNIST 数据非规范化并没有给我同样的回报