【问题标题】:express-jwt - Show permission for debugexpress-jwt - 显示调试权限
【发布时间】:2020-08-03 03:25:46
【问题描述】:

可能会在错误中间件中显示需要哪些权限?

//User don't have this permission
app.post("/", guard.check(permissions.$("admin")), (req, res) => {
  return new Area(req.body)
    .save()
    .then(area => {
     ///....
    })
    .catch(err => next(err))
})

错误中间件

我想在 console.log() 中显示权限

app.use(function (err, req, res, next) {
   
  
  if (err.code === "invalid_token") {
    return res.status(401).send("...")
  }

  if (err.code === "credentials_required") {
    return res.status(401).send("...")
  }

  //...
})

【问题讨论】:

  • 提供您的guard.check 功能。我想权限存在于req.user.permission之类的东西中
  • 这是一个来自express-jwt-permissions库的内置函数。
  • 在您的错误处理程序中,只需打印console.log(req.user)
  • 打印用户发送的所有权限记录。我想知道特定路径需要哪些权限并打印出来。
  • 呵呵!,这是一个非常好的主意。请发布答案。

标签: express express-jwt


【解决方案1】:

你可以将guard.check中间件包装成另一个中间件,然后把需要的权限放到req对象中,然后在error handler中间件中获取。

const customGuard = (permissions) => { // middleware factory
  return (req, res, next) => { // return a middleware function
    req.requiredPermissions = permissions; // store `permissions` in `req.requiredPermissions`
    guard.check(permissions)(req, res, next); // check your permissions with express-jwt-permissions's guard
  }
}

使用,替换

app.post("/", guard.check(permissions.$("admin"))
...

app.post("/", customGuard(permissions.$("admin"))
...

然后,在您的错误中间件中

app.use(function (err, req, res, next) {

  console.log("Required permissions: ", req.requiredPermissions); // here

  if (err.code === "invalid_token") {
    return res.status(401).send("...")
  }

  if (err.code === "credentials_required") {
    return res.status(401).send("...")
  }

  //...
})

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2017-09-10
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多