gpt4 book ai didi

javascript - Express.js JWT 授权成功后始终返回默认 404 错误

转载 作者:行者123 更新时间:2023-12-01 00:10:02 25 4
gpt4 key购买 nike

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

如果没有 token 或 token 无效,则不会发生这种情况。未经授权的错误,并且所有路由在没有 token header 的情况下都可以正常工作。

我高度怀疑问题出在 authHandler 中的 return next() 但我不知道原因。

app.js中中间件的顺序:

//Authorization
app.use(authHandler);

//Routes
app.use(routes);

//Method 404 middleware
app.use(errorHandler.notFound);

//Generic error handler middleware
app.use(errorHandler.generic);

授权处理程序:

const jwt = require('jsonwebtoken');

exports.userHeader = async (req, _res, next) => {
if (req.headers && req.headers.authorization) {
jwt.verify(
req.headers.authorization,
process.env.JWT_SECRET,
(err, decode) => {
if (!err) {
req.user = decode;
return next();
}
}
);
}

req.user = undefined;
return next();
};

protected 路线:

posts.get('/', user_handler.login_required, post_controller.index);

login_required 处理程序:

async (req, _res, next) => {
if (req.user) {
return next();
}

let error = new Error('Unauthorized');
error.status = 401;
return next(error);
};

错误响应:

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="utf-8">
<title>Error</title>
</head>

<body>
<pre>Cannot GET /posts</pre>
</body>

</html>

最佳答案

我已经测试了你的代码。对我来说,只需稍加改动就可以正常工作。只需输入 req.user = undefined;
return next();
在像这样的 else 语句中 else{ req.user = undefined;
返回下一个();}

关于javascript - Express.js JWT 授权成功后始终返回默认 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60141061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com