首页 > 解决方案 > 如何使用 Express & Passportjs 检查 MongoDB 文档中的特定字段

问题描述

我有一个 NodeJS Web 应用程序正在运行,它有 express、mongoose、passportjs 以及其他与这个问题无关的模块。

有两种类型的用户,每种用户在我的数据库中都有自己的集合。

  1. 用户
  2. 行政

当用户通过登录页面成功登录时,他们会被重定向到“/memberdashboard”。同样,当管理员通过登录页面成功登录时,他们会被重定向到“/admindashboard”。

两个集合都有一个“用户名”和“密码”字段。但是在我的管理员集合中,有一个额外的字段“isAdmin”,它的类型是布尔值。

我想根据他们是否是管理员来重定向登录到我网站的人。

例如,如果 userA 有 {"isAdmin" : true},他们将被重定向到 /admindashboard,否则他们将被重定向到 /memberdashboard。

一些代码可能有助于解释我想要实现的目标。

app.get("/memberdashboard", function(req, res) {

    if(req.isAuthenticated()) {

        res.render("memberdashboard");
    } else {
        res.redirect("/member");
    }
});

app.get("/admindashboard", function(req, res) {

    if(req.isAuthenticated()) {

        res.render("admindashboard");
    } else {
        res.redirect("/admin");
    }
});

我的目标是利用它

if(req.isAuthenticated() && //User is Admin) {
    //redirect to appropriate page
}

希望这很清楚:)

标签: node.jsexpressmongoosepassport.jsexpress-session

解决方案


req.user一旦用户通过身份验证,Afaik 护照就会填充。因此,您可以将检查扩展/membershipdashboard到:

if (req.isAuthenticated()) {
    if (req.user.isAdmin) {
        return res.redirect("/admin");
    }
    res.render("memberdashboard");
} else {
    res.redirect("/member");
}

/admindashboard您可以对-route执行此操作,反之亦然。


推荐阅读