如何使用 Express & Passportjs 检查 MongoDB 文档中的特定字段

Posted

技术标签:

【中文标题】如何使用 Express & Passportjs 检查 MongoDB 文档中的特定字段【英文标题】:How do I check a specific field in a MongoDB Document using Express & Passportjs 【发布时间】:2020-12-05 05:55:54 【问题描述】:

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

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

    用户 管理员

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

两个集合都有一个“用户名”和“密码”字段。 但是在我的 Admin 集合中,有一个额外的字段“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

希望这很清楚:)

【问题讨论】:

【参考方案1】:

用户通过身份验证后,Afaik 护照将填充 req.user。因此,您可以将/membershipdashboard 的检查扩展为:

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

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

【讨论】:

感谢您的快速响应。你是对的,我可以使用 req.user.fieldName 访问字段

以上是关于如何使用 Express & Passportjs 检查 MongoDB 文档中的特定字段的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose & Express:从子文档发布数据

Mongoose & Express:从子文档发布数据

如何使用VS2008中集成的SQL Server 2005 Express?

Express Route & Socket io

express:如何使用 sendFile 将 html 和 css 一起发送?

关于express