Node.js和Express排除路由形式JWT中间件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js和Express排除路由形式JWT中间件相关的知识,希望对你有一定的参考价值。
我试图排除特定路由的JWT身份验证。我成功地能够将其排除在某些路线上,但不能用于其他路线。我发布下面的代码。
我不需要身份验证进入下面提到的路线,它工作正常。
app.post('/api/register*', function(request,response, next){
console.log("Entered register/user function");
registerProxy(request, response, next);
});
我需要身份验证才能输入下面提到的路线,它运行正常。
app.get('/api/users*', protected, function(request, response, next){
console.log('Entered userinfo function');
userInformationProxy(request,response,next);
});
以下是我的“受保护”功能
function protected(request, response, next) {
console.log('Entered function to strip jwt');
console.log(request.method, request.url);
const bearerHeader = request.headers['authorization'];
if(typeof bearerHeader !== 'undefined'){
console.log('JWT is present');
const bearer = bearerHeader.split(' ');
const bearerToken = bearer[1];
request.token = bearerToken;
jwt.verify(request.token, secretKey, function(error, authData){
if(error){
response
.status(403)
.json({'message': 'Forbidden'})
} else{
console.log(authData);
if(request.url.includes(authData.username)){
next();
} else{
response
.status(403)
.json({'message': 'Forbidden'})
}
}
});
} else {
response
.status(403)
.json({'message': 'Forbidden'})
}};
}
但是当我试图进入下面提到的路线时,我遇到了一个问题:
app.get('/api/search', function(request, response, next){
console.log('Entered search function');
searchProxy(request, response,next);
});
虽然我没有用“受保护”功能来保护这条路线,但它禁止给我一个错误403
我做错了吗?我是Node.js和JWT的新手
答案
只需确保此路由定义:
app.get('/api/search', function(request, response, next){
console.log('Entered search function');
searchProxy(request, response,next);
});
在此之前:
app.get('/api/users*', protected, function(request, response, next){
console.log('Entered userinfo function');
userInformationProxy(request,response,next);
});
而且,你发送searchProxy()
的回复,不要打电话给next()
。如果您发送响应并且不调用next()
,则不会运行其他路由,因此无法访问您的protected()
中间件。
以上是关于Node.js和Express排除路由形式JWT中间件的主要内容,如果未能解决你的问题,请参考以下文章
在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由
使用 GraphQL 和 jwt-express 绕过 JWT
在 JWT 中存储秘密信息,使用 Node.js - Express 后端
Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的令牌错误