2013-08-06 5 views
12

Я довольно новичок в Laravel и задал вопрос о функции помнить меня.Laravel 4 Запомнить меня истекает время

Я успешно включил функцию «запомнить меня», добавив второй аргумент в метод Auth :: try.

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

Как указано в документации, это позволяет запомнить меня на неопределенный срок или пока пользователь не выйдет вручную.

Я действительно хочу установить дату истечения срока действия функции «запомнить меня».

Глядя на консоль, я вижу, что включение «запомнить меня» генерирует cookie remember_ {HASH}.

Что было бы лучшим способом переписать дату истечения срока действия, указанную в этом файле cookie, чтобы сказать неделю в будущем? В настоящее время cookie устанавливает дату в прошлом, что делает ее последней навсегда.

Имейте в виду, что мне пришлось установить «lifetime» => 0 в session.php, чтобы я мог вызвать функцию «запомнить меня», основанную на предпочтениях пользователя, поэтому изменение этого на неделю не помогло бы в моем случае.

Спасибо!

+4

Laravel устанавливает срок годности ** + 5 лет **. Нет, вы не можете, если вы не измените ядро, потому что 'Auth :: попытка()' использует 'Cookie :: forever()' метод для хранения файла cookie, и время истечения ** жестко закодировано ** в него. Таким образом, чтобы установить время истечения срока, вы должны наложить руки на ядро ​​Laravel. –

+0

Я считаю, что вы можете создать свой собственный пакет и использовать это вместо пакета Auth, поставляемого вместе с Laravel. Однако, если вы новичок в laravel, тогда это может оказаться неприемлемым. – Cristian

ответ

15

Я не знаю, есть ли у него хороший способ сделать это или нет, но если вы отчаянно пытаетесь установить время истечения срока, чтобы запомнить меня, вы можете попробовать это, но это работает для меня.

Пусть Laravel-х Auth::atempt($credential,true) сделать свой нормальный бизнес, то есть, установка запомнить меня срок действия, 5 лет

Мы изменим это в App::after() метод, поэтому в файле filters.php найти App::after() метод и изменить куки истечение времени

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 
    } 
}); 

Примечание: Cookie::make('name','value','expiration time');

+0

Спасибо за ответ! Это отлично работает, и я предпочел бы сделать это, чем редактировать основные файлы. –

Смежные вопросы