我最近使用 bcrypt
在我的网站上添加了身份验证。进行身份验证时,bcrypt
会比较密码。
如果密码匹配,req.session
将设置为 cookie 并使用 connect-mongodb-session
写入 mongodb
。但是,当重定向到 /events
时,应用程序崩溃并给出错误:错误 [ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置 header
我正在使用 Handlebars 来渲染我的 html 代码
验证路线:
Router.get('/', (req, res) => {
res.status(200).render('login', {pageTitle: 'Log In'});
})
Router.post('/', (req, res) => {
//Authenticate user
const username = req.body.username;
const pass = req.body.password;
User.findOne({username: username}).then((user) => {
if (user) {
//Validate password
console.log(user);
console.log(user.password);
bcrypt.compare(pass, user.password).then((doMatch) => {
console.log(doMatch);
//Check if password match
if (doMatch) {
//To use session use express-session package
req.session.isLoggedIn = true;
req.session.user = user;
req.session.save((err) => {
console.log(err);
res.redirect('/');
});
return res.redirect('/events');
} else {
res.redirect('/');
}
}).catch((err) => {
console.log(err);
});
} else {
return res.redirect('/');
}
}).catch((err) => {
console.log(err);
});
});
事件路线:
Router.get('/events', (req, res) => {
if (req.session.isLoggedIn) {
Event.find({}, (err, events) => {
res.render('events', {
prods: events,
pageTitle: 'Events',
path: '/events',
hasProducts: events.length > 0
});
}).catch((err) => {
console.log(err);
});
} else {
console.log('User not authenticated');
res.status(401).send('User not authenticated');
}
});
最佳答案
这些行是罪魁祸首。
req.session.save((err) => {
console.log(err);
res.redirect('/');
});
return res.redirect('/events');
在这里,您将回调传递给 save
并立即重定向 res.redirect('/events')
。
一段时间后,回调重定向 res.redirect('/');
抛出错误。
关于javascript - 出现错误 : cannot set headers after they are sent to the client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53240356/