2013-07-19 10 views

Odpowiedz

18

Możesz użyć numeru req.isAuthenticated(), aby sprawdzić, czy żądanie zostało uwierzytelnione, czy nie.

function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { return next(); } 
    res.redirect('/login') 
} 

app.get('/server', ensureAuthenticated, routes.server.get); 
app.get('/login', routes.login.get); 

Albo jak ten

app.all('*', function(req,res,next){ 
    if (req.params === '/' || req.params === '/login') 
    next(); 
    else 
    ensureAuthenticated(req,res,next); 
}); 
+7

Chrystus, dzięki Bogu 'isAuthenticated()' jest * * całkowicie nieudokumentowane **. To jest jak cały punkt biblioteki. Pewnego dnia znajdę tego gościa z Jared Hanson, wyślę dron z dużą gumową dłonią do jego domu i uderzę go kilkakrotnie za trollingowanie świata za pomocą usługi Passport. Dzięki. –

+0

Amen! prosto na partnera hehe! @JasonC –

2

Wystarczy, dopóki nie przeciekasz gdzieś na trasie. Po prostu upewnij się, że twoje trasy są w odpowiedniej kolejności.

//checks to be sure users are authenticated 
app.all("*", function(req, res, next){ 
    if (!req.user) 
    res.send(403); 
    else 
    next(); 
}); 
//additional routes will require authentication due to the order of middleware 
app.get("/admin", .... 

Jeśli jednak przeniesiesz ścieżkę administratora powyżej globalnej, trasa administratora nie będzie już chroniona. Możesz celowo umieścić swoją stronę logowania wcześniej, aby na przykład nie wymagało uwierzytelniania.

2

Korekta na odpowiedź user568109 i oferują Express 4 kod musi być tak:

app.all('*', function(req,res,next) { 
    if (req.path === '/' || req.path === '/login') 
    next(); 
    else 
    ensureAuthenticated(req,res,next); 
}); 
Powiązane problemy