Express-js中间件没有按预期工作.它显示了太多重定向



Express-js中间件未按预期工作。它显示了太多重定向。当我删除令牌或注销时,它在浏览器中显示有太多的重定向

中间件

const isAuthenticate = async (req, res, next) => {
const token = req.cookies.jwt;
if (token) {
jwt.verify(token, "thisisjwtsecret", async (err, token_decode) => {
if (!err) {
const u_id = token_decode._id;
const userData = await User.findOne({ _id: u_id });
req.user = userData;
req.isAuth = true;
next();
} else {
res.redirect("/user/login");
}
});
} else {
res.redirect("/user/login");
}
};

Route.js


// Auth Controller
const AuthController = require("../../controllers/auth/AuthController");
const { isAuthenticate } = require("../../middlewares/isAutheticated");
router.get("/user/login", isAuthenticate, AuthController.login);
router.post("/user/login", AuthController.checkLogin);
router.get("/user/register", isAuthenticate, AuthController.createUser);
router.post("/user/register", isAuthenticate, AuthController.storeUser);
module.exports = router;

LOgin功能

// Showing Login Page to User
const login = (req, res) => {
return res.render("auth/login");
};

当我删除令牌或注销时,它在浏览器中显示有太多的重定向

现在您已经显示了isAuthenticate()的修订代码,重定向循环是由该代码中的重定向引起的。情况如下:

使用isAuthenticate作为路由中间件的某个路由(任何路由(检测到用户未登录。然后重定向到/user/login。到目前为止还可以。然后,浏览器发出一个新的/user/login请求,并将您带到这个路由定义:

router.get("/user/login", isAuthenticate, AuthController.login);

但是,该路由定义再次运行重定向到/user/loginisAuthenticate()中间件,因此您有一个无限的重定向循环。

可能您只需要从此路由中删除isAuthenticate()检查。如果用户已经转到/user/login页面,则不需要检查他们的身份验证或重定向他们。如果你有理由想知道他们是否经过了身份验证,那么你需要一个单独的版本,只进行身份验证检查,不重定向,你可以在/user/login路由定义中使用它。


显示执行res.redirect((的代码之前的原始答案。

因此,您展示的这个中间件将req.isAuth设置为truefalse,然后调用next()继续路由。通过该中间件的所有三条代码路径都只设置req.isAuth,然后调用next()。在这个中间件中,没有任何地方可以进行重定向。因此,如果核心问题是重定向过多,那么这个问题一定是由其他实际执行重定向的路由/中间件在其他地方引起的,可能是当它看到req.isAuthfalse时,因为您说过问题发生在注销或令牌丢失时。

重定向时,您必须确保当您重定向到某个URL时,该URL的路由处理程序也重定向到该URL的可能性为零(没有任何类型的代码路径(。这就是进入重定向循环的方式。

查看您显示的其他路由,如果重定向到/user/login时出现了重定向过多的问题,那么问题可能出现在该路由的authController.login()处理程序中:

router.get("/user/login", isAuthenticate, AuthController.login);

如果该路由的代码检查req.isAuth并在任何情况下重定向,那么这将是一个无休止的重定向循环。

如果您需要进一步的建议,请提供以下信息:

  1. 哪个确切的重定向URL会导致重定向过多的问题?是/user/login
  2. 向我们显示执行重定向的路由的代码,因为这显然是故障所在

最新更新