在快速路线上应用 jwt 而不会引发错误
Apply jwt on express routes without raising an error
有没有办法使用中间件在我所有的快速路由上应用 jwt,而不是在令牌丢失或无效时引发错误,而是用 null
[=16 填充 req.user
=]
我目前的解决方案:
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
根据 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();
}
}
有没有办法使用中间件在我所有的快速路由上应用 jwt,而不是在令牌丢失或无效时引发错误,而是用 null
[=16 填充 req.user
=]
我目前的解决方案:
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()
,即使使用有效令牌
根据 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();
}
}