在快速路线上应用jwt而不产生错误

时间:2018-09-09 23:46:09

标签: javascript node.js express jwt express-jwt

是否可以使用中间件将jwt应用于我的所有快速路由,但是如果令牌丢失或无效,则不会引发错误,而是用req.user填充null

我当前的解决方案:

var jwt = require('express-jwt');
var router = express.Router();

router.use(jwt({ secret: 'secret'}));

///////////////////////////////////////////
// This is the piece I would like to avoid
router.use((err, req, res, next) => {
    if (err.code === 'UnauthorizedError') {
        req.user = null;
    }
    next();
})
///////////////////////////////////////////

router.use('/products', require('./products/products_router'));

在我的路线中,如果令牌丢失或无效,我希望有req.user === null,如果令牌有效,我希望有req.user。当前,如果没有要删除的代码,没有令牌就不会执行我的路由。如果我使用unless(),即使使用有效令牌也不会填充req.user

1 个答案:

答案 0 :(得分:1)

根据documentation,您可以在选项对象中指定“ credentialsRequired”属性:

app.use(jwt({
  credentialsRequired: false
}));

您可以在原始源代码中查看其工作原理:

if (!token) {
  if (credentialsRequired) {
    return next(new UnauthorizedError('credentials_required', { message: 'No authorization token was found' }));
  } else {
    return next();
  }
}