使用Passport.js为一些用户加速表达会话

时间:2016-06-13 14:03:20

标签: node.js express passport.js express-session

我正在运行一个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;
  }

0 个答案:

没有答案