验证用户是否是基于req.user secure的管理员?

时间:2014-07-10 01:58:24

标签: javascript node.js express passport.js

我在express.js应用中使用一个简单的中间件功能来验证用户是否具有管理员权限:

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

passport正用于帐户身份验证。

这是安全的还是req.user.admin可以注入请求中,而不应该拥有管理员权限的用户?我应该首先找到一个用户,然后检查所述用户是否具有管理员权限?例如:

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("/");
    }
}

对我来说,这似乎是不必要的复杂。它还会导致更多的数据库访问。这是否有必要验证用户是真正的管理员还是我的第一个功能?从本质上讲,谁可以查看或更改req,从而req.user

1 个答案:

答案 0 :(得分:0)

我对护照并不十分熟悉,但如果它与express-session的工作方式类似,则req.session对象存储在(可能加密的)cookie中,因此如果您构建了一个身份验证系统,您可以将用户信息存储在req.session.user中,并确信它是安全的。