express -jwt - Показать разрешение на отладку - PullRequest
0 голосов
/ 20 апреля 2020

Возможно показать в промежуточном программном обеспечении ошибки, какие разрешения необходимы?

//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("...")
  }

  //...
})

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете поместить guard.check промежуточное ПО в другое промежуточное ПО, и вы можете установить необходимые разрешения для req объекта, а затем получить его в промежуточном ПО обработчика ошибок.

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("...")
  }

  //...
})
...