2014-08-30 82 views
0

因此,我試圖在我的laravel應用程序的登錄過程中創建'記住我'功能。我創建了電子郵件,密碼一種基本形式,並記住我複選框作爲輸入,就可以看到下面:laravel中的'記住我'功能的困難

<div class="col-xs-0 col-sm-6 col-md-6 col-md-offset-3 col-sm-offset-3 col-cs-offset-5" id="content"> 

    {{ Form::open(['route' => 'sessions.store']) }} 

     <div> 

      {{ Form::label('email', 'Email:') }} 

      {{ Form::email('email') }} 

     </div> 

     <div> 

      {{ Form::label('password', 'Password:') }} 

      {{ Form::password('password') }} 

     </div> 

     <div> 

      {{ Form::label('remember', 'Remember me:') }} 
      {{ Form::checkbox('remember', 'Remember-me') }} 

     </div> 

     <div>{{ Form::submit('login') }}</div> 

    {{ Form::close() }} 

</div> 

這個帖子下面的功能。但是現在發生的是,用戶是總是使用true參數登錄。我究竟做錯了什麼?

public function store() 
{ 

    $email = Input::get('email'); 
    $password = Input::get('password'); 
    $remember = Input::get('remember'); 

    if ($remember == 'Remember-me') { 

     if (Auth::attempt(array('email' => $email, 'password' => $password), true)) 
     { 

      return Redirect::intended('/'); 

     } 

     return Redirect::back()->withInput(); 

    } else { 

     if (Auth::attempt(array('email' => $email, 'password' => $password))) 
     { 

      return Redirect::intended('/'); 

     } 

     return Redirect::back()->withInput(); 

    } 

} 
+0

它是如何知道用戶被記住的?你在看會議,餅乾還是別的地方? – Elin 2014-08-31 15:42:36

+0

通過手動測試。選中複選框登錄,關閉瀏覽器,然後重新打開頁面。沒有勾選複選框,行爲沒有變化。 – User183849481 2014-08-31 16:30:10

+0

從閱讀「類似問題」,這是因爲會議不是記住我。關閉瀏覽器不會結束你的會話(這在所有其他問題中都很清楚)。確保你實際註銷並檢查以確保會話被銷燬。 – Elin 2014-08-31 16:38:57

回答

1

傳遞true作爲Auth::attempt第三個參數將記得成功登錄。此外,您的$remember檢查沒有意義,因爲複選框應該表示布爾值,並且Input::get將其返回爲1null,其分別評估爲truefalse

你可能想要的是這樣的:

public function store() 
{ 
    $input = Input::only('email', 'password'); 
    $remember = Input::get('remember'); 

    if (Auth::attempt($input, $remember) 
    { 
     return Redirect::intended('/'); 
    } 

    return Redirect::back()->withInput(); 
} 
+0

它每次都會記住用戶,即使該框未被檢查... – User183849481 2014-08-31 10:15:12

+0

@ User183849481多長時間? – nCrazed 2014-08-31 17:27:25

+0

即使在重新啓動計算機之後;請參閱 – User183849481 2014-08-31 20:14:41

0

原因之一還記得我是很難做到的權利(有很多)是第一次有人用盒登錄檢查,他們需要常規地登錄並且觸發你將要做的存儲,這允許他們在他們的會話過期並且他們已經關閉他們的瀏覽器之後回來時不提供他們的用戶名和密碼而登錄。因此,初始認證必須是完全的正常情況除了添加未來登錄存儲的步驟。正在檢查的記住我框在初始認證中播放沒有作用。假設你要將數據存儲在一個cookie中,選中該框意味着在成功認證之後,cookie被創建,並且記住我認證所需的其他邏輯被實現(並且我不會深入討論那些問題)。

後來當他們回來時,他們不需要檢查框或類似的東西,他們應該只是登錄。那時記住我的功能發揮作用,但它是你正在實現。

+0

我想你誤解我在這裏做什麼。用戶只需要檢查一次該複選框,以便永久保持登錄狀態。但是現在當用戶沒有選中該框時也是這樣,例如他希望下次再次登錄。 – User183849481 2014-08-31 10:12:51

+0

所以你說的是記得我的cookie總是被創建?你確定這不是常規會議仍然活躍? – Elin 2014-08-31 15:33:50

0

這爲我工作:

$remember = (Input::has('remember')) ? true : false; 

觀是這樣的:

<div class="field"> 
     <input type="checkbox" name="remember" id="remember" /> 
     <label for="remember">Remember me</label> 
    </div> 

關老教程中,我不知道在哪裏,我發現,但它的作品。

+0

'Input :: has('remember')'無論如何都是布爾值。爲什麼'如果真實,回報真實,否則返回假'廢話? – Harmen 2014-08-31 13:36:14

+0

您對複選框的值使用了什麼? – User183849481 2014-08-31 13:36:20

+0

我更新了視圖代碼 – 2014-08-31 13:38:49