2017-02-05 14 views
6

Nowsze wersje Laravel (poprawnie) używają POST do wylogowania się z sesji. Rozumowanie tego jest takie, że GET/HEAD powinien być używany tylko do działań pasywnych, aby być zgodnym z HTTP.Jak wylogować się z wygasłej sesji w Laravel 5.x?

wpis jest z tokena CSRF chroni również złośliwych użytkowników/witryn z zalogowaniu cię z sesji: https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection

Jednak jeśli sesja już upłynął limit czasu, a użytkownik kliknie wylogowania (która wyzwala POST do trasy wylogowania) otrzymano błąd niedopasowania tokena. Ma to sens - token nie pasuje, ponieważ sesja wygasła.

Mogę po prostu złapać ten szczególny wyjątek TokenMismatchException na podstawie zmiennych żądania, a jeśli tak, kontynuuj je na swojej wesołej drodze (do wylogowanej ścieżki przekierowania, powiedz "dom" lub "/"). Tak:

public function render($request, Exception $e) 
{ 
    if ($e instanceof TokenMismatchException && $request->getRequestUri() === '/logout') { 
     return redirect('/'); 
    } 

    return parent::render($request, $e); 
} 

Moje pytanie: jeśli robię powyższego, co jest punktem tokena w pierwszej kolejności? A jak wylogować użytkownika, gdy jego sesja wygasła, przy zachowaniu zamierzonych rezultatów używania wylogowania POST z tokenem CSRF?

+0

W przypadku konieczności ochrony wylogowania: http://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection/62797 Aby odpowiedzieć na swoje pytanie, proszę przekazać mi informacje, jaki mechanizm ogranicza czas sesji? – Mkay1

+0

@ Mkay1 zakłada dowolny limit czasu (limit czasu sesji, sesja zniszczona, itp.). Podany link jest taki sam w moim pytaniu – Chris

Odpowiedz

3

Oprogramowanie pośredniczące, które sprawdza uwierzytelnianie, powinno zostać uruchomione przed oprogramowaniem pośredniczącym, które sprawdza poprawność tokenu CSRF.

W ten sposób, gdy sesja wygasła, nigdy nie dostaniesz się do sprawdzenia CSRF, ponieważ już sprawdziłeś, czy nie upłynęła sesja w oprogramowaniu pośredniczącym do uwierzytelniania i wykonałeś przekierowanie na stronę logowania.

Nie wpłynie to na wylogowanie się z sesji CSRF ważnych, ponieważ ważna sesja przejdzie przez oprogramowanie pośredniczące do uwierzytelniania.

Domyślnie oprogramowanie pośredniczące Laravel uruchamia najpierw kontrolę CSRF. Jednak powinno być łatwo zmienić ich kolejność, aby działały w inny sposób.

+0

To naprawdę ma sens. Używam domyślnych tras dla auth, a wszystkie są poza domyślnym oprogramowaniem auth middleware, ale siedzą w oprogramowaniu pośredniczącym sieci. Dam im teraz shuffle i wrócę z twoją odpowiedzią, jeśli masz prawo. Ciekawe, dlaczego domyślnym zachowaniem jest trasa wylogowania poza auth middleware – Chris

+0

Nie jest tak, że domyślne zachowanie jest poza trasą wylogowania poza auth middleware. To dlatego, że auth middleware dla tras uwierzytelniania jest domyślnie ustawione w konstruktorze kontrolera uwierzytelnienia, więc działa po zwykłej liście oprogramowania pośredniego. –

+0

Ah tak, nigdy nie zamieniłem się na oprogramowanie pośrednie poziomu kontrolera, więc zapomnij, że istnieją tbh. Korzystam tylko z oprogramowania warstwy pośredniej na poziomie trasy lub dostawcy tras. Czuję się bardziej spójna i widoczna dla mnie. – Chris