我用express写一个app,我想在global中实现一个变量current_user,以确保用户是否登录过。所以,我添加了一个中间件
app.use(require('./controller/user').auth_user);
在user.js中,我定义了一个名为auth_user的方法,使用res.locals设置一个全局本地current_user。 并设置req.session.user = user。
exports.auth_user = function(req, res, next) {
if (req.session.user) {
res.locals('current_user', req.session.user);
return next();
} else {
var cookie = req.cookies['user_cookie'];
if (!cookie){
res.locals('current_user', "");
return next();
};
var auth_token = decrypt(cookie, 'user_session');
var auth = auth_token.split('\t');
var user_email=auth[3].toLowerCase();
User.findOne({'email': user_email},function(err, result) {
if(err) return next(err);
if (result) {
req.session.user = result;
res.locals('current_user', req.session.user);
return next();
}else{
return next();
}
});
}
};
所以,我把一个用户对象放到req,当我调试时,我发现可以从req获取user.hashed_password。我认为它不安全。 浏览器端的用户可以获取此信息吗?
答案 0 :(得分:0)
只要您不在其他地方公开信息,这是安全的。至少从浏览器无法访问req
对象的角度来看。
无论如何,另一个问题是,如果您只需要一些特定的部分,是否最好将完整的用户对象附加到req
对象。为什么不附加不包含哈希的该对象的精简版本?
无论如何,无论浏览器是否能够访问它,您的问题都会消失。