【发布时间】:2023-04-07 04:53:01
【问题描述】:
我目前正在尝试使用护照对我的 node.js Web 应用程序进行身份验证。但是,我遇到了正确存储会话数据的问题。目前,它根本没有被存储。
App.js
// required for passport
app.use(session({ secret: 'ilovescotchscotchyscotchscotch' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session
passport.js
var users = [
{ id: 1, username: 'bob', password: 'secret', email: 'bob@example.com' },
{ id: 2, username: 'joe', password: 'birthday', email: 'joe@example.com' }
];
function findById(id, fn) {
fn(null, users[1]);
}
module.exports = function(passport, db) {
// used to serialize the user for the session
passport.serializeUser(function(user, done) {
console.log("serialization" + JSON.stringify(user, null, 4));
done(null, user.personnel_id);
});
// used to deserialize the user
passport.deserializeUser(function(id, done) {
findById(id, function (err, user) {
console.log("deserialization" + JSON.stringify(user, null, 4));
done(err, user);
});
});
routes.js
app.post('/login', passport.authenticate('local-login',
{
successRedirect: '/profile',
failureRedirect:'/login',
failureFlash: true,
badRequestMessage: 'Please enter your account credentials to login.'
}));
// =====================================
// PROFILE SECTION =====================
// =====================================
// we will want this protected so you have to be logged in to visit
// we will use route middleware to verify this (the isLoggedIn function)
app.get('/profile', isLoggedIn, function(req, res) {
console.log("req query:" + JSON.stringify(req.query, null, 4));
console.log("req body:" + JSON.stringify(req.body, null, 4));
res.render('profile.jade', {
user : req.user // get the user out of session and pass to template
});
});
在上面的代码中,下面的代码按这个顺序执行
- 用户验证成功,因此调用 serialize 和 serialize。
- 应用程序被重定向到所需的 /profiles,但请求为空。我期待反序列化数据出现在 req.body 中的某个位置,但我没有看到
我可能忽略了一些小事, 任何帮助表示赞赏, 谢谢, D
【问题讨论】:
标签: node.js session express passport.js