Passport.js 在 Express 4.11.1 中,它不会写入 session.passport
Passport.js in Express 4.11.1, it does not write into the session.passport
我在使用 passport.js 和 express 4.11.1
时遇到了一个小问题
下面是我的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());
最后我在router中定义:
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});
}
});
现在我发现的问题是我可以成功登录,但是当我尝试打印出来时req.session.passport,我发现会话中的护照对象是{}。我想可能是因为 passport.serializeUser 函数没有真正起作用,但是当我尝试打印出传递给 passport.serializeUser 函数的用户对象时,它有值。有人可以帮我调查这个问题吗?提前致谢。
你的代码看起来不错,除了这部分:
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true,
cookie: { secure: true } <<<<<<<<<<
}));
docs 说您在使用 https 时应该使用安全 cookie,因此排除该字段应该可以解决您的问题。
secure boolean marks the cookie to be used with HTTPS only.
我在使用 passport.js 和 express 4.11.1
时遇到了一个小问题下面是我的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());
最后我在router中定义:
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});
}
});
现在我发现的问题是我可以成功登录,但是当我尝试打印出来时req.session.passport,我发现会话中的护照对象是{}。我想可能是因为 passport.serializeUser 函数没有真正起作用,但是当我尝试打印出传递给 passport.serializeUser 函数的用户对象时,它有值。有人可以帮我调查这个问题吗?提前致谢。
你的代码看起来不错,除了这部分:
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true,
cookie: { secure: true } <<<<<<<<<<
}));
docs 说您在使用 https 时应该使用安全 cookie,因此排除该字段应该可以解决您的问题。
secure boolean marks the cookie to be used with HTTPS only.