【发布时间】:2016-02-22 14:04:00
【问题描述】:
让客户端会话中间件在 Express 中工作时遇到了一些问题。简而言之,在设置后重定向到新路由时似乎无法访问 session_state。作为参考,我关注了this video tutorial(客户端会话部分大约在 36:00 开始)并仔细检查了我的步骤,但仍然遇到问题。中间件设置如下:
var sessions = require('client-sessions');
使用来自 Express 网站的代码进行实例化。
app.use(sessions({
cookieName: 'session',
secret: 'iljkhhjfebxjmvjnnshxhgoidhsja',
duration: 24 * 60 * 60 * 1000,
activeDuration: 1000 * 60 * 5
}));
如果有任何区别,我将会话中间件放置在 bodyParser 和路由之间。
以下是我的routes/index.js 与该问题相关的部分。 req.session_state 似乎设置正常,并且正确的用户详细信息记录到控制台。
// POST login form
router.post('/login', function(req, res) {
User.findOne( { email: req.body.email }, function(err,user){
if(!user) {
console.log("User not found...");
res.render('login.jade',
{ message: 'Are you sure that is the correct email?'} );
} else {
if(req.body.password === user.password) {
// User gets saved and object logs correctly in the console
req.session_state = user;
console.log("session user...", req.session_state);
res.redirect('/dashboard');
}
}
//res.render('login.jade', { message: 'Invalid password'} );
});
});
但是,运行 res.redirect('/dashboard'); 时出现了问题,因为 session_state 在到达该路由时不可访问。这是/dashboard 路由的代码。
router.get('/dashboard', function(req, res) {
// OUTPUT = 'undefined' ???
console.log("dash...", req.session_state);
// 'if' fails and falls through to /login redirect
if(req.session && req.session_state){
console.log("dash route...", req.session_state);
User.findOne( { email: req.session_state.email }, function
(err, user){
if(!user){
req.session.reset();
res.redirect('/login');
} else {
res.locals.user = user;
res.render('dashboard.jade')
}
});
} else {
res.redirect('/login');
}
//res.render('dashboard', { title: 'Your Dashboard' });
});
基本上,存储在 session_state 中的对象在 /dashboard 重定向后无法访问。我一直在尝试调试它一天左右,但没有任何运气。非常感谢任何帮助。抱歉,如果我遗漏了一些明显的东西。只是用会话中间件弄湿了我的脚,所以也许我还没有完全掌握 Session 或者我忽略了一些东西。提前致谢!
【问题讨论】:
标签: javascript node.js session express session-cookies