【问题标题】:Spotify API Node - Wrong SessionSpotify API 节点 - 错误的会话
【发布时间】:2018-12-03 00:01:48
【问题描述】:

我目前遇到多个用户在我的网络应用上看到错误内容的问题。所以,user A 会登录并查看他们的详细信息,然后user B 会登录并查看他们的详细信息,这很好。但是当user A 刷新页面时,他们会看到user B's 的详细信息。即使刷新(user B 之后仍然登录),我如何让它保留 user A's 详细信息?

这是我目前拥有的:

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.');
});

【问题讨论】:

    标签: javascript node.js session cookies spotify


    【解决方案1】:

    每个用户都有自己的access_token,但是当他们访问/details 时,您只需使用spotifyApi.getAccessToken() 获得在spotifyApi 的服务器端实例上设置的最后一个access_token。

    因此,如果用户 A 登录,然后用户 B 登录,则用户 A 确实会看到用户 B 的详细信息,因为对 /details 的调用是使用仍然具有 access_tokenspotifyApi 实例进行的用户 B。

    您需要有一种方法来区分哪个用户正在调用/details,并使用适当的令牌。最简单的方法是让客户端知道他们自己的令牌并让他们在请求中将其发送到您的服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2015-05-04
      • 2018-08-12
      相关资源
      最近更新 更多