2014-02-27 62 views
1

令牌不匹配異常我隨後創建使用Laravel一個註冊和登錄頁面this教程。上登錄(Laravel)

一切正常,唯一的問題是我無法登錄。如果我提供了錯誤的用戶名/密碼,它正確地給了我一個錯誤信息。但是,如果使用正確的憑據,我碰到下面的錯誤 -

Illuminate \ Session \ TokenMismatchException 

這是我的(默認)CSRF功能 -

Route::filter('csrf', function() 
{ 
    if (Session::token() != Input::get('_token')) 
    { 
     throw new Illuminate\Session\TokenMismatchException; 
    } 
}); 

這是形式的行動 -

{{ Form::open(array('url'=>'signin', 'class'=>'form-signin')) }} 

這是我UsersController的相關部分

public function __construct() { 
$this->beforeFilter('csrf', array('on'=>'post')); 
$this->beforeFilter('auth', array('only'=>array('getDashboard'))); 

} 
public function postSignin() { 
     if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password')))) { 
      return Redirect::to('dashboard')->with('message', 'You are now logged in!'); 
     } else { 
      return Redirect::to('login') 
      ->with('message', 'Your username/password combination was incorrect') 
      ->withInput(); 
    } 
} 

public function getDashboard() { 
    $this->layout->content = View::make('users.dashboard'); 
} 
+0

嘗試'DD(會話令牌::();'和'DD(輸入::獲得(「_令牌」)'在CSRF過濾器檢查哪一部分是缺少令牌 – Andreyco

+0

問題隨機整流本身......哦哦。 –

+0

您是否在表單中添加了此行? '' – captainblack

回答

3

Laravel對會話進行了相當深奧的使用,並且當用戶cookie和用戶salt存儲在數據庫中時出於某種原因(例如,當您重新爲您的用戶表進行種子設定)出現不一致時,您會收到令牌不匹配異常進一步解釋。

如果是這樣,請刪除您的Cookie。

0

我在登錄時也遇到了這個問題。不時發生這種異常,所以我停下來試圖重現它。我通過這樣做成功:

首先我加載登錄頁面。

然後我刪除了cookies。

然後,無需重新加載登錄頁面,我輸入了用戶名和密碼並嘗試登錄。

因爲會話被刪除(當我刪除了餅乾),這是正常的,這個代碼是不會通過,它會拋出TokenMismatchException。

Route::filter('csrf', function() { 
    if (Session::getToken() != Input::get('_token')) { 
     throw new Illuminate\Session\TokenMismatchException; 
    } 
}); 

所以,我做了什麼來解決我的問題是,添加一個重定向到登錄頁面,提示信息通知,本次會議可能過期的用戶。

Route::filter('csrf', function() { 
    if (Session::getToken() != Input::get('_token')) { 
     return Redirect::to('/admin/login')->with('warning', 'Your session has expired. Please try logging in again.'); 
    } 
}); 

因此,頁面重新加載後,會創建一個新的會話並解決問題。

0

/config/session.php 組信息「expire_on_close」 =>真實,保存和加載再次烏爾網站,你不會用令牌匹配異常得到了該問題上登錄

1

檢查路線:列表,查看如果登錄受到網絡中間件的保護。在我的情況下,我通過添加web middileware來登錄路由器,它應該是guest中間件,從而犯了錯誤。

0

我有這個問題,它是由沒有可用磁盤空間造成的。

獲取一些空間並嘗試再次登錄。