Sta*_*tec 8 node.js express jwt express-jwt
我正在尝试合并express-jwt库,我不太明白它是如何处理错误的.
该文件说:
错误处理
默认行为是在令牌无效时抛出错误,因此您可以>添加自定义逻辑以管理未经授权的访问,如下所示:
app.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401).send('invalid token...');
}
});
Run Code Online (Sandbox Code Playgroud)
但我很困惑这是如何工作的.如果我有一个简单的req res情况,并且我想next在令牌有效时调用,或者next如果不是,则调用错误,我在哪里放置该app.use函数?
例如,这是我的代码:
router.post('/', expressJwt({
secret: jwtSecret,
credentialsRequired: false
}), (req, res, next) => {
databaseController.findUser(req.user.email, (err, user) => {
if (err) {
return next(err)
}
res.json(user)
})
})
Run Code Online (Sandbox Code Playgroud)
在err这里将来自我的DB调用,而不是从快递,智威汤逊验证.任何帮助表示赞赏.
Amr*_*ani 20
另一种方法是您可以使用app.use放置中间件来扫描标头或查询字符串中有效jwt的所有路由.可以使用unless关键字免除任何公共端点.例如:
app.use(expressjwt({credentialsRequired: true, secret: config.TOKEN_SECRET, requestProperty: 'user'}).unless({path: config.PUBLIC_URLs}));
app.use(function(err, req, res, next) {
if(err.name === 'UnauthorizedError') {
res.status(err.status).send({message:err.message});
logger.error(err);
return;
}
next();
});
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我对个别路线的解决方案。
function UseJwt(){
return [
jwtExpress({ secret: configuration.jwtSecret, algorithms: ['HS256'] }),
function(err, req, res, next){
res.status(err.status).json(err);
}
]
}
Run Code Online (Sandbox Code Playgroud)
用法...
app.get(`/${prefix}/:user_id`,
...UseJwt(),
async function (req, res) {
// handle your code here.
}
)
Run Code Online (Sandbox Code Playgroud)