gpt4 book ai didi

node.js - Express 4.11.1中的Passport.js,它不会写入session.passport

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:24 25 4
gpt4 key购买 nike

我在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});
}
});

现在我发现的问题是我可以成功登录,但是当我尝试打印出req.session.passport时,我发现 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.

关于node.js - Express 4.11.1中的Passport.js,它不会写入session.passport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com