我几乎阅读了所有可能的帖子,帖子,问题,我开始设置会话cookie,但仍然没有得到完美的解决方案。
我创建了一个Web应用程序,我想在其中设置已登录的会话cookie。
无法弄清楚"用户"未定义。我在哪里缺乏?我已经做了每一个跟踪和错误来找出错误。
App.js文件
const session = require('client-sessions');
app.use(cookieParser());
app.use(session({
cookieName: 'sessioncookie',
secret: 'long_string_which_is_hard_to_crack',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000,
}));
Routes.js文件
router.post('/login', (req, res) => {
const emaild = req.body.email;
const passd = req.body.pass;
db.collection('check').findOne({email: emaild}, (err, result) => {
if (err) return console.log(err);
console.log(result.passcode);
console.log('Retrived from database');
bcrypt.compare(passd, result.passcode, function(err, boolean) {
console.log(boolean);
if(boolean == true) {
req.session.user = user; //// It's Undefined
res.redirect('/dashboard');
} else {
res.send('<h1>Wrong Password</h1>');
}
});
});
});
答案 0 :(得分:1)
当您使用findOne
方法查询集合时,它会返回相关文档(此处为user
,您将其命名为result
),您应该使用有意义的参数{{ {1}}然后user
在此回调函数中可用。
当您在user
上收到以下错误时:
无法设置属性&#39;用户&#39;未定义的
这意味着req.session.user = user;
是req.session
。使用快递,根据请求设置undefined
是session
。在这里,您正在使用client-sessions,它会在初始化时通过session middlewares
选项值附加会话。所以你应该像下面那样设置它:
cookieName
请注意中间件排序很重要。您应该在设置路由之前使用中间件配置应用程序。这样,每个传入的请求都会填充您已设置的所需配置。