如何使用Express&Passportjs检查

问题描述

我有一个正在运行的NodeJS Web应用程序,它具有表达,猫鼬,通行证js以及与此问题无关的其他模块。

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

  1. 用户
  2. 管理员

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

两个集合都有一个用户名”和“密码”字段。 但是,在我的Admin集合中,有一个额外的字段“ isAdmin”,其类型为Boolean。

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

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

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

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

    if(req.isAuthenticated()) {

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

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

    if(req.isAuthenticated()) {

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

我的目标是利用它

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

希望这很清楚:)

解决方法

用户经过身份验证后,

Afaik护照将填充req.user。因此,您可以将/membershipdashboard的支票扩展为:

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

对于/admindashboard路由,您可以反之亦然。