我正在运行一个Express node.js应用程序,该应用程序允许用户使用PassportJS本地或LinkedIn策略登录,并且对于大多数用户来说,工作正常 - 他们登录并查看他们的个人资料。
对于一小部分用户(可能是5%),当他们第一次点击“注册”时然后他们的浏览器似乎读取了另一个用户的经过身份验证的会话cookie,因此他们会立即被带到不同用户的个人资料中。这些用户都在同一个雇主工作,但分布在不同的地理位置(不像我最初希望的那样共享计算机)。
他们的IT服务并不是非常有用,所以如果有人有类似情况的经验,我会感激不尽,他们不应该分享会话吗?这可能是我或他们的IT基础设施的问题吗?
我已尝试similar question的答案,将app.disable('view cache');
添加到我的app.js,但没有快乐。
我的会话是使用Redis设置的,所以我的app.js看起来像:
var express = require('express');
var app = express();
var path = require('path');
var port = process.env.PORT || 3000;
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var passport = require('passport');
var LinkedInStrategy = require('passport-linkedin').Strategy;
var LocalStrategy = require('passport-local').Strategy;
var config = require('./config').config();
var bcrypt = require('bcrypt-nodejs');
var helmet = require('helmet')
var Model = require('./data/models/model');
app.disable('view cache');
app.use(session({
store: new RedisStore({
host: '127.0.0.1',
port: 6379
}), secret: 'mysecretkey' }));
app.use(passport.initialize());
app.use(passport.session());
// view engine and routes here
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
if (obj.provider != 'linkedin'){
new Model.User({id: obj.id}).fetch().then(function(user) {
done(null, user.attributes);
})
}
else {
new Model.User({email: obj.emails[0].value}).fetch().then(function(data) {
if(data != null){
return done(null, data.attributes);
}
else{
return done(null, obj);
}
})
}
});
app.listen(port);
#UPDATE2
我的nginx配置:
location / {
proxy_pass http://1.2.3.4:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}