2013-08-06 26 views
12

Jestem całkiem nowy dla Laravel i miałem pytanie dotyczące pamiętania funkcji.Laravel 4 Pamiętaj, że upłynął czas

Udało mi się włączyć funkcję "zapamiętaj mnie", dołączając drugi argument do metody próbnej Auth :: like.

if (Auth::attempt(array('email' => $email, 'password' => $password), true)) 
{ 
    // The user is being remembered... 
} 

Jak wspomniano w dokumentacji, umożliwia to zapamiętywanie mnie w nieskończoność lub do momentu ręcznego wylogowania użytkownika.

Zasadniczo chcę ustawić datę wygaśnięcia w funkcji "zapamiętaj mnie".

Patrząc na konsolę, widzę, że włączenie opcji "zapamiętaj mnie" generuje plik cookie remember_ {HASH}.

Jaki byłby najlepszy sposób nadpisania daty wygaśnięcia określonej w tym pliku cookie, aby można było powiedzieć, że będzie to tydzień w przyszłości? Ciasteczko obecnie ustawia datę w przeszłości, co sprawia, że ​​jest trwała wiecznie.

Należy pamiętać, że musiałem ustawić "lifetime" => 0 w session.php, aby móc wywołać funkcję remember me w oparciu o preferencje użytkownika, więc zmiana tego na tydzień nie zadziałałaby w moim przypadku.

Dzięki!

+4

Laravel ustawia czas wygaśnięcia na ** + 5 lat **. Nie, nie możesz, chyba że zmienisz rdzeń, ponieważ 'Auth :: attempt()' używa metody 'Cookie :: forever()' do przechowywania ciasteczka, a czas wygaśnięcia ** jest ** zakodowany **. Aby ustawić czas wygaśnięcia, musisz położyć ręce na rdzeniu Laravela. –

+0

Sądzę, że można stworzyć własny pakiet i użyć go zamiast pakietu "Auth" dołączonego do Laravel. Jednak jeśli jesteś nowicjuszem w laravel, może to nie być odpowiednie. – Cristian

Odpowiedz

15

Nie wiem, czy to dobry sposób na zrobienie tego, czy nie, ale jeśli jesteś zdesperowany, aby ustawić czas wygaśnięcia, aby mnie zapamiętać, możesz spróbować, działa to jednak dla mnie.

Niech laravel na Auth::atempt($credential,true) zrobić normalnej działalności gospodarczej, tj ustawienie zapamiętaj mnie czas przydatności do 5 lat

Będziemy zmienić w App::after() metody, więc w pliku filters.php znaleźć App::after() metody i zmienić cookie Wygaśnięcie czas

App::after(function($request, $response) 
{ 
    if (Auth::check()){ 
     $ckname=Auth::getRecallerName(); //Get the name of the cookie, where remember me expiration time is stored 
     $ckval=Cookie::get($ckname); //Get the value of the cookie 
     return $response->withCookie(Cookie::make($ckname,$ckval,360)); //change the expiration time 
    } 
}); 

Uwaga: Cookie::make('name','value','expiration time');

+0

Dzięki za odpowiedź! Działa to świetnie i wolę to zrobić niż edytować podstawowe pliki. –