Express 4.11.1中的Passport.js不写入session.passport

使用express 4.11.1使用passport.js时遇到一些小问题

以下是我的app.js

var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( function(username, password, done) { if(username == '1' && password == '1') { var user = {username: 'test',id: 123,firstName: 'test'}; return done(null, user); } else { return done(null, false, {message: 'Incorrect username or password'}); } } )); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(username, done) { var user = { username: 'test', id: 123, firstName: 'test' }; done(null, user); }); module.exports = passport; 

然后我修改了我的app.js,添加了中间件

 var passport = require('./auth'); app.use(session({ secret: 'secret', resave: true, saveUninitialized: true, cookie: { secure: true } })); app.use(express.static(path.join(__dirname, 'public'))); app.use(passport.initialize()); app.use(passport.session()); 

最后,我在路由器中定义了:

 var passport = require('../auth'); router.get('/login', function (req, res, next) { res.render('login', {title: 'Login', message: ''}); }); router.post('/login', passport.authenticate('local', { successRedirect: '/user2', failureRedirect: '/login' })); router.get('/user2', function(req, res) { console.log(req.session.passport); if(req.session.passport.user === undefined) { res.redirect('/login'); } else { res.render('user2', {title: 'Welcome!', user: req.user}); } }); 

现在我发现的问题是,我可以成功login,但是当我尝试打印出req.session.passport时,发现会话中的护照对象是{}。 我猜也许这是因为passport.serializeUser函数并没有真正的工作,但是当我尝试打印出传递给passport.serializeUser函数的用户对象时,它具有值。 有人能帮我看看这个问题吗? 提前致谢。

你的代码看起来很好,除了这部分:

 app.use(session({ secret: 'secret', resave: true, saveUninitialized: true, cookie: { secure: true } <<<<<<<<<< })); 

文档说,当你使用https时你应该使用安全的cookie,所以排除这个字段应该解决你的问题。

安全布尔标记cookie仅用于HTTPS。