请告诉我如何才能只允许管理员访问特定的路径

这是我的MongoDB数据库

{
  "_id": {
    "$oid": "640e16b3186c0b1910c1dedf"
  },
  "isAdmin": true,
  "name": "sample name",
  "email": "bb@gmail.com",
  "password": "$2a$10$tbi9fblLS9NXai3Osb7H7OdLVqq34I0OTKgvB5BmVBEASabvX/ybu",
  "__v": 0
}

IsAdmin设置为True我希望admin是唯一可以访问此路由的人

router.post(`/categories`, async (req, res) => {
  if(req.body.isAdmin){
try {
    let category = new Category();
    category.type = req.body.type;
    category.description = req.body.description;

    await category.save();
    res.json({
      status: true,
      message: "save succes"
    });
  } catch (error) {
    res.status(500).json({ success: false, message: error.message });
  }}
  else{
    console.log("auth")
  }
});

每次我try 上面的代码时,它都会跳过if语句并转到Else

推荐答案

更好的方法是创建一个用于判断isAdmin的中间件,并将该中间件放在您希望仅由admin访问的路径上.

在您的路径文件中,从MidleWare文件夹导入中间件,并将其应用于您想要保护的路径.

如下所示:

Middleware

module.exports = (req, res, next) => {
  if (!req.body.isAdmin) {
    return res.status(401).json({ success: false, message: "Sorry, you need admin access for this route" })
  }
  next()
}

Route

const isAdmin = require("./middlewares/isAdmin")

router.post(`/categories`, isAdmin, async (req, res) => {
    try {
      let category = new Category();
      category.type = req.body.type;
      category.description = req.body.description;

      await category.save();
      res.json({
        status: true,
        message: "save succes"
      });
    } catch (error) {
      res.status(500).json({ success: false, message: error.message });
    }
});

通过这种方式,您可以将该中间件重用于多个路由,并且不需要重复代码来判断每个控制器函数上是否有isAdmin个.

Note:如果isAdmin密钥不在请求正文中或为假,则中间件将返回状态401.

Node.js相关问答推荐

CloudTasksClient在Firebase Function % s onDocumentCreated中实例化时导致错误

无法从MongoDB文档中保存的对象数组中获取对象的属性

当变量在另一个文件中初始化时,在初始化错误之前无法访问变量

更新 mongodb 中的交易值

如何设置 Puppeteer Select 器的唯一性?

Cypress.io - 如何等待返回调用属性的方法的结果?

表达 js 错误处理程序在第一个之后被忽略

在 getServerSideProps 中使用 EmailProvider 获取 NextAuth 会话会抛出 fs找不到模块

express 和 mongoose 的新密码不正确

node-gyp: "..\src\binding.cc: 没有这样的文件或目录"

为什么后端开发需要单独的服务器?

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

简单的 Node js 程序但执行顺序似乎不同?

aws cdk 2.0 init 应用程序无法构建更漂亮的问题,这来自 jest-snapshot

用于排除多个文件的 node.js glob 模式

有人在 NodeJS 中实现过 wiki 吗?

Puppeteer:如何提交表单?

路由后的 Node Express 4 中间件

node.js 异步库

CORS 错误:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权