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。