Jak korzystać z oprogramowania pośredniczącego, aby sprawdzić autoryzację przed wejściem na każdą trasę w Expressie?
Chcę sprawdzić autoryzację użytkowników mojej aplikacji internetowej po wprowadzeniu adresu url. Ale kiedy użyłem indywidualnego oprogramowania pośredniczącego do sprawdzenia autoryzacji, jest bezużyteczne dla już istniejących tras, takich jak:
function authChecker(req, res, next) {
if (req.session.auth) {
next();
} else {
res.redirect("/auth");
}
}
app.use(authChecker);
app.get("/", routes.index);
app.get("/foo/bar", routes.foobar);
The authChecker jest nieabled, aby sprawdzić uprawnienia użytkowników, którzy wprowadzili dwa adresy URL. Działa tylko dla nieokreślonych adresów URL.
I zobaczyłem metodę, którą mogę umieścić authChecker pomiędzy trasą a Obsługą trasy, takie as:
app.get("/", authChecker, routes.index);
Ale jak Mogę to osiągnąć w prosty sposób, zamiast umieszczać authChecker na każdej trasie?
Dziękuję bardzo..3 answers
Tak długo jak
app.use(authChecker);
Jest przed
app.use(app.router);
Zostanie wezwany na każde żądanie. Jednak otrzymasz "zbyt wiele przekierowań", ponieważ jest ono wywoływane dla wszystkich tras, w tym /auth. Aby to obejść, proponuję zmodyfikować funkcję do czegoś takiego jak:
function authChecker(req, res, next) {
if (req.session.auth || req.path==='/auth') {
next();
} else {
res.redirect("/auth");
}
}
W ten sposób nie będziesz przekierowywał również do auth url.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-18 15:05:31
Są sposoby, aby podejść do tego problemu, ale oto, co działa dla mnie.
Lubię tworzyć tablicę oprogramowania pośredniczącego dla chronionych i niezabezpieczonych tras, a następnie używać w razie potrzeby.
var protected = [authChecker, fetchUserObject, ...]
var unprotected = [...]
app.get("/", unprotected, function(req, res){
// display landing page
})
app.get("/dashboard", protected, function(req, res){
// display private page (if they get this far)
})
app.get("/auth", unprotected, function(req, res){
// display login form
})
app.put("/auth", unprotected, function(req, res){
// if authentication successful redirect to dashboard
// otherwise display login form again with validation errors
})
Ułatwia to rozszerzenie funkcjonalności dla każdego zakresu middleware poprzez edycję tablicy dla każdego typu trasy. Sprawia to również, że funkcja każdej trasy jest bardziej przejrzysta, ponieważ informuje nas o rodzaju trasy.
Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 19:40:49
Ale kiedy użyłem indywidualnego oprogramowania pośredniczącego do sprawdzenia autoryzacji, jest bezużyteczne dla już istniejących tras
Express uruchomi middleware w kolejności dodanej do stosu. Router jest jedną z tych funkcji oprogramowania pośredniczącego. Tak długo, jak dostaniesz authChecker
do stosu przed routerem, będzie on używany przez wszystkie trasy i wszystko będzie działać.
Najprawdopodobniej masz router przed authChecker, ponieważ masz zdefiniowane trasy przed otrzymaniem authChecker do stosu. Upewnij się, że wszystkie połączenia app.use
przed wszystkimi połączeniami do app.get
, app.post
, etc, aby uniknąć irytującego wtrysku routera przez express do stosu middleware.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 14:49:19