处理可组合中间件中的Express-JWT错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理可组合中间件中的Express-JWT错误相关的知识,希望对你有一定的参考价值。
我正在为每个API实现JWT授权,如下所示:
auth.js
import expressJwt from 'express-jwt';
import compose from 'composable-middleware';
var validateJwt = expressJwt({
secret: config.secrets.session
});
function isAuthenticated() {
return compose()
.use(function(req, res, next) {
validateJwt(req, res, next);
})
.use(function(req, res, next) {
User.find({
where: {
id: req.user.id
}
}).then(function(user){
//Handle User
}).catch(function(err){
//Handle DB Error
});
});
}
index.js
import auth from '../../auth';
import express from 'express';
import controller from './user_group.controller';
import * as validators from './user_group.validations';
// Create router object
const router = express.Router();
// Get all user groups
router.get('/', [auth.isAuthenticated(), validators.index], controller.index);
除了JWT的错误处理之外,一切都工作得很好。我不理解validateJwt(req, res, next);
函数如何在移动到下一个中间件之前处理Unauthorized Error stack
。
答案
我用以下方法完成了它:
.use(function(err, req, res, next) {
if(err) {
return res.status(constants.INVALID_OR_NO_ACCESS_TOKEN.code).json({
status: 'error',
code: constants.INVALID_OR_NO_ACCESS_TOKEN.code,
message: constants.INVALID_OR_NO_ACCESS_TOKEN.message
}).end();
}
User.find({
where: {
id: req.user.id
}
})
另一答案
您可以在validateJwt之后添加另一个.use
return compose()
.use(function(req,res,next){
validateJwt(req, res, next);
})
.use(function(err, req,res,next){
if(err){
//here you will catch the error generated by the validateJWT
// eg: return res.status(401).json(err.message);
// or: return next(err);
}
else{
next();
}
})
以上是关于处理可组合中间件中的Express-JWT错误的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会引发未经授权的错误
使用 express-jwt,我可以返回 401 以外的其他状态码吗?