Próbuję użyć middleware authenticateUser() przed załadowaniem wszystkich moich stron. Zamiast umieszczać go w każdym wywołaniu (jak w app.get ("/", authenticateUser, function() ...)), próbowałem ustawić go za pomocą app.use (authenticateUser) tuż przed wywołaniem app.use (app.router).Node.js - problem z res.redirect w oprogramowaniu pośrednim
To jednak nie działało. authenticateUser jest zasadniczo:
if (req.session.loginFailed) {
next()
else {
if (req.session.user_id) {
...
if (userAuthenticated) {
next();
} else {
req.session.loginFailed = true;
console.log('setting loginFailed to true');
res.redirect('/login');
}
}
}
A potem w app.get ('/ login') ustawić req.session.loginFailed się fałszywe;
To powinno zadziałać, ale chcę tylko wywołać to na app.get() lub app.post() itp. Dla jednej z moich rzeczywistych stron. Wydaje mi się, że jest on wywoływany wiele razy dla wielu różnych żądań (ponieważ po załadowaniu jednej strony, "ustawienie loginFailed na true" jest wywoływane wiele razy)
Czy istnieje lepszy sposób na zrobienie tego? A może powinienem dzwonić przed każdą stroną w mojej witrynie?
Wystarczająco uczciwe, zabawne, ponieważ faktycznie pracowałem nad tutorialami nodepad. Chodzi o to, że cała moja strona wymaga zalogowania, więc zhakowałem razem sposób, by nie musieć ręcznie włączać go na wszystkie trasy, ale uwzględnię to, jeśli jest to właściwe. –
Zgadzam się z @alessioalex. Jeśli jednak kładziesz nacisk na podejście, które opracowałeś, upewnij się, że twój app.use (authenticateUser) jest PO UP oprogramowaniu pośredniczącym. – danmactough