node.js - 如何使用 Express & Passportjs 检查 MongoDB 文档中的特定字段
问题描述
我有一个 NodeJS Web 应用程序正在运行,它有 express、mongoose、passportjs 以及其他与这个问题无关的模块。
有两种类型的用户,每种用户在我的数据库中都有自己的集合。
- 用户
- 行政
当用户通过登录页面成功登录时,他们会被重定向到“/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
}
希望这很清楚:)
解决方案
req.user
一旦用户通过身份验证,Afaik 护照就会填充。因此,您可以将检查扩展/membershipdashboard
到:
if (req.isAuthenticated()) {
if (req.user.isAdmin) {
return res.redirect("/admin");
}
res.render("memberdashboard");
} else {
res.redirect("/member");
}
/admindashboard
您可以对-route执行此操作,反之亦然。
推荐阅读
- c - 为什么 GNU dd 在 dup2 中重用文件描述符 0 和 1?
- php - Docker - Symfony 4 - Doctrine - 拒绝用户访问
- azure - 使用graph api禁用office365邮箱
- typescript - tslint - 组内的导入源必须按字母顺序排列
- time-complexity - 如何计算代码片段中大θ的时间复杂度?
- windows-installer - 用于卸载 installshield 设置的 C# 代码
- ios - 隐藏导航控制器搜索栏并以编程方式打开大标题
- java - 在不丢失对象引用的情况下内联调用 setter
- angular - 如何在每个按钮单击时将数据附加到列表中:Angular typescript + Laravel
- elasticsearch - Logstash:使用日志文件的行号作为 document_id