Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express.js JWT在成功授权时始终返回默认404错误_Javascript_Node.js_Express_Jwt - Fatal编程技术网

Javascript Express.js JWT在成功授权时始终返回默认404错误

Javascript Express.js JWT在成功授权时始终返回默认404错误,javascript,node.js,express,jwt,Javascript,Node.js,Express,Jwt,我正在尝试执行JWT授权,但当授权成功时,它会在每个请求上返回Express.js default 404 error page HTML页面,而不是我定义的错误处理程序 如果没有令牌或令牌无效,则不会发生这种情况。未经授权的错误,没有令牌头,所有路由都可以正常工作 我高度怀疑下一个authHandler会出现问题,但我不知道原因 app.js中中间件的顺序: //授权书 app.useauthHandler; //路线 app.useroutes; //方法404中间件 app.useerro

我正在尝试执行JWT授权,但当授权成功时,它会在每个请求上返回Express.js default 404 error page HTML页面,而不是我定义的错误处理程序

如果没有令牌或令牌无效,则不会发生这种情况。未经授权的错误,没有令牌头,所有路由都可以正常工作

我高度怀疑下一个authHandler会出现问题,但我不知道原因

app.js中中间件的顺序:

//授权书 app.useauthHandler; //路线 app.useroutes; //方法404中间件 app.useerrorHandler.notFound; //通用错误处理中间件 app.useerrorHandler.generic; authHandler:

const jwt=require'jsonwebtoken'; exports.userHeader=async req,\u res,next=>{ 如果req.headers&&req.headers.AUTHORITION{ 验证 请求标题授权, process.env.JWT_SECRET, 错误,解码=>{ 如果{ req.user=解码; 下一步返回; } } ; } req.user=未定义; 下一步返回; }; 受保护路线:

posts.get'/',user_handler.login_required,post_controller.index; 登录\u所需的处理程序:

异步请求,下一步=>{ 如果需要用户{ 下一步返回; } let error=新错误“未经授权”; error.status=401; 回归恐怖; }; 错误响应:

错误
我已经测试了你的代码。对我来说,只要稍作改动,它就能正常工作。 仅放置req.user=未定义; 下一步返回;在else语句中,如以下所示{req.user=undefined; return next;}

问题出在authHandler中。如果不起作用,下一个必须在外部范围内。我不知道它到底是如何产生这样的问题的,但它的执行上下文或其他内容是不同的,所以express会引发错误

如果有人能揭开这种情况的神秘面纱,那就太好了

authHandler:

const jwt=require'jsonwebtoken'; exports.userHeader=async req,\u res,next=>{ 如果req.headers&&req.headers.AUTHORITION{ 验证 请求标题授权, process.env.JWT_SECRET, 错误,解码=>{ 如果{ req.user=解码; } } ; return next;//这个必须在这里 } req.user=未定义; 下一步返回; };
是否检查了路由?@GetSet Yes,如果没有令牌头和授权,则一切正常运行,这修复了已损坏的授权,但根问题是在verify回调中调用next。我在if中移动了下一个外壳,现在可以工作了。