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");
}
};
路由.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;
登錄功能
// Showing Login Page to User
const login = (req, res) => {
return res.render("auth/login");
};
當我洗掉令牌或注銷時,它會在瀏覽器中顯示太多重定向
uj5u.com熱心網友回復:
現在您已經顯示了 的修改代碼isAuthenticate(),重定向回圈是由該代碼中的重定向引起的。這是發生的事情:
您擁有的用作路由中間件的某些路由(任何路由)isAuthenticate檢測到用戶未登錄。然后它重定向到/user/login. 到那時還好。然后,瀏覽器發出一個新請求/user/login,將您帶到此路由定義:
router.get("/user/login", isAuthenticate, AuthController.login);
但是,該路由定義再次運行isAuthenticate()重定向到的中間件,/user/login因此您有一個無限的重定向回圈。
可能您只需要isAuthenticate()從此路線中洗掉支票。如果用戶已經訪問該/user/login頁面,則無需檢查他們的身份驗證或重定向他們。如果您有理由想知道它們是否經過身份驗證,那么您需要一個單獨的版本,它只進行身份驗證檢查并且不重定向,您可以在/user/login路由定義中使用它。
顯示代碼之前的原始答案是 res.redirect()。
因此,您展示的這個中間件設定req.isAuth為trueorfalse然后呼叫next()以繼續路由。通過該中間件的所有三個代碼路徑都只是設定req.isAuth然后呼叫next(). 在這個中間件中沒有任何地方做任何重定向。因此,如果核心問題是重定向過多,則該問題必須由其他一些實際執行重定向的路由/中間件在其他地方引起,可能req.isAuth是false因為您說問題發生在注銷或令牌時不見了。
重定向時,您必須絕對確保當您重定向到 URL 時,該 URL 的路由處理程式也將重定向到該 URL 的可能性為零(沒有任何型別的代碼路徑)。這就是您進入重定向回圈的方式。
查看您顯示的其他路由,如果重定向到時出現過多的重定向問題/user/login,那么問題很可能出在authController.login()該路由的處理程式中:
router.get("/user/login", isAuthenticate, AuthController.login);
如果該路由的代碼req.isAuth在任何情況下都檢查并重定向,那么這將是一個無限的重定向回圈。
如果您需要進一步的建議,請提供以下資訊:
- 哪個確切的重定向 URL 導致了重定向過多的問題?是
/user/login嗎? - 向我們展示執行該重定向的路線的代碼,因為這顯然是錯誤所在。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449316.html
標籤:javascript 节点.js 表示
下一篇:在嵌入中使用畫布設定影像
