正在validation用户是否是基于req.user安全的pipe理员?

我在我的express.js应用程序中使用简单的中间件function来validation用户是否具有pipe理员权限:

 function isAdmin (req, res, next) { if (req.user.admin) return next(); res.redirect("/"); } 

passport正在用于帐户validation。

这是安全的还是可以req.user.admin被注入请求谁不应该有pipe理员权限的用户? 我应该先find一个用户,然后检查用户是否具有pipe理员权限? 例如:

 function isAdmin (req, res, next) { if (req.user) { User.findOne({ "_id" : req.user._id }, function (err, user) { if (err) { throw err; } else if (user.admin) { return next(); } else { res.redirect("/"); } }) } else { res.redirect("/"); } } 

对我来说,这似乎是不必要的复杂。 这也会导致更多的数据库访问。 这是否需要validation用户是真正的pipe理员还是我的第一个function足够? 实质上,谁可以查看或更改req ,从而req.user

我对护照并不熟悉,但是如果它与express-session的工作方式相似,req.session对象就被存储在一个(可能是encryption的)cookie中,所以如果你build立一个authentication系统,你可以存储用户信息在req.session.user和有信心是安全的。