2013-08-06 38 views
12

我對Laravel相當陌生,並對記住我的功能有疑問。Laravel 4記得我過期時間

我已經成功地啓用了「記住我」功能,將第二個參數附加到Auth :: attempt方法中,如下所示。

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

正如文檔中所述,這可以記住我無限期地或直到用戶手動註銷。

我基本上想設置「記住我」功能的過期日期。

看着控制檯,我可以看到啓用「記住我」會生成一個remember_ {HASH} cookie。

覆蓋此cookie中指定的過期日期以便讓將來說一週的最佳方式是什麼?該Cookie目前設置了過去的日期,這使得它永遠持續下去。

請記住,我必須在sessions.php中設置'lifetime'=> 0,這樣我才能根據用戶的喜好觸發記住我的功能,所以將其改爲一週不會對我有用。

謝謝!

+4

Laravel將到期時間設置爲** + 5年**。不,除非你改變內核,否則你不能這樣做,因爲'Auth :: attempt()'使用'Cookie :: forever()'方法存儲cookie,並且過期時間是**硬編碼**。因此,要設置到期時間,您必須按照Laravel核心。 –

+0

我相信你可以創建自己的包,並使用它來代替與Laravel捆綁在一起的'Auth'包。但是,如果你是新手,那麼它可能不適合。 – Cristian

回答

15

我不知道它是否是一種很好的方法來做到這一點,但如果你急於設置記住我的過期時間,你可以試試這個,但它適用於我。

讓laravel的Auth::atempt($credential,true)做其正常的業務,即記得我到期時間設定到5年

我們將在App::after()方法來改變這一點,所以在你filters.php文件中找到App::after()方法和更改cookie到期時間

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

感謝您的回答!這很好,我寧願這樣做,而不是編輯核心文件。 –