首页 > 解决方案 > 生产环境中 node.js 应用程序中 connect.sid 和会话的问题

问题描述

节点应用程序使用passport-ldap 进行身份验证,问题是它在开发环境中就像一个魅力,但在生产环境中存在问题。当路由被更改时,我失去了用户的会话,因为应用程序的 connect.sid(cookie)正在被更改,因为我有一个新的 setCookie 响应。

我正在使用express 4.17.1express-session 1.16.2,所以从我的研究中我发现我不必使用 cookieParser。我还认为用户和护照功能的序列化和反序列化没有问题。

// Static folder set
app.use(express.static(path.join(__dirname, 'public')));

// Body parser middleware

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());


app.set('trust proxy', 1) //trust first proxy

// Express session midleware 
app.use(session({
  secret: 'abc',
  resave: true,
  saveUninitialized: true,
  cookie: { secure: true }
}));

// Passport middleware
app.use(passport.initialize());
app.use(passport.session());

...

// Use routes of the application
app.use('/users', users);

标签: node.jsexpresspassport.jssession-cookies

解决方案


我找到了解决方案并将其发布以供将来参考,以防其他人面临类似问题。

我使用了 cors 模块并像这样设置它

app.use(cors({credentials: true}));

同样在生产环境中,您必须使用商店来保存 cookie。这很明显,但我错过了。所以我用

const MongoStore = require('connect-mongo')(session);

app.use(session({
  secret: 'abc',
  resave: false,
  saveUninitialized: false,
  cookie: { secure: true,
    maxAge:  6*60*60*1000 },
  store: new MongoStore({ mongooseConnection: mongoose.connection })
}));

推荐阅读