Search code examples
expressexpress-jwt

express-jwt - Show permission for debug


It's possible show in error middleware what permissions are needed?

//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))
})

Error middleware

I would like to show permission here in a 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("...")
  }

  //...
})


Solution

  • You can wrap guard.check middleware into another middleware, and you can put the required permissions to req object, and then you can get it in the error handler middleware.

    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
      }
    }
    

    Usage, replace

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

    by

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

    Then, in your Error middleware

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