2014-04-23 93 views
25

我使用laravel 4框架。當我在Auth :: logout()之後使用重定向時,重定向不起作用。我也使用了View :: make(),但是同樣的「Whoops,看起來像是出了問題。」錯誤拋出。Laravel重定向註銷不起作用

public function getLogout() { 
     Auth::logout(); 
    return Redirect::to('users/login')->with('message', 'Your are now logged out!'); 
} 

這是註銷碼。我在用。有人請幫助我。

routes.php文件

Route::get('/', function() 
    { 
return View::make('hello'); 
    }); 

Route::controller('users', 'UsersController'); 

HTML

  @if(!Auth::check()) 
       <li>{{ HTML::link('users/register', 'Register') }}</li> 
       <li>{{ HTML::link('users/login', 'Login') }}</li> 
      @else 
       <li>{{ HTML::link('users/logout', 'logout') }}</li> 
      @endif 

這是我的調試器顯示。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' (SQL: update `users` set `updated_at` = 2014-04-23 11:30:41, `remember_token` = jSMcfpPnCPrKgwqfhB2tEEEd8h8x6d72viz67MbVzBD27A2G7AH8yWQo1ORf where `id` = 1) 
+0

了你remember_token值可以告訴你的路線? 'users.login'視圖是否存在?因爲你的代碼看起來和我的註銷方法非常相似...... –

+2

爲了獲得開發機器上顯示的有用的調試信息,你應該在'app/config/app.php中添加一個''debug'=> true'' '(或'app/config/local/app.php'')和/或將你的開發機器的主機名添加到'bootstrap/start.php'中的environments-array中。有關更多詳細信息,請參閱http://laravel.com/docs/configuration#environment-configuration。 – Quasdunk

+0

@ pc-shooter是,該視圖存在。重定向工作正常,沒有Auth :: logout() – winnyboy5

回答

51

您可能會缺少users表的remember_token。

看到:http://laravel.com/docs/upgrade#upgrade-4.1.26

Laravel需要 「VARCHAR的可空remember_token(100),文本,或等同於你的用戶表。」現在

更新新文檔

Laravel 4.2和起來了,你可以用你的架構構建使用一種方法來添加此列。

$table->rememberToken();

Laravel Docs - Schema - Adding Columns

+7

如果更詳細 - 你必須編輯你的遷移文件並添加:$ table-> text('remember_token') - > nullable();然後重新運行遷移 – Heihachi

+0

這可以像時間戳一樣以自動方式完成嗎? ($ table-> timestamps();) –

+1

@TomBusby實際上Laravel 4.2的文檔現在有一個用於此標記的方法。 $表 - > rememberToken(); – lagbox

1

這裏是我處理如何註銷用戶使用Laravel 4.我不知道爲什麼你不工作,這將是非常高興看到你的路線,和HTML代碼我的系統上的示例代碼,也會觸發註銷過程。

的路徑

Route::get('logout', array('uses'=>'[email protected]')); 

的HTML按鈕/鏈路觸發註銷

<a href="{{URL::to('logout')}}" class="btn btn-danger btn-sm">Logout</a> 

控制器功能處理的註銷

public function logout(){ 

    Auth::logout(); 

    return Redirect::to('login'); 
} 

你來了!您應該將其替換爲路由名稱和控制器功能。這應該工作!如果沒有,請發佈您的路線和HTML代碼!乾杯!

+0

不,它沒有工作。我認爲這個問題在於getLogout函數 – winnyboy5

+0

修復了它感謝您的幫助,雖然........ :) – winnyboy5

+1

太棒了!很高興你解決它!乾杯! – mandeeya

1

由於目前Laravel更新應該有一個「remember_token」 在user表列。這解決了這個問題。

0

我才知道,我在我的應用程序獲得註銷錯誤,因爲我是用

Route::post('logout', array('uses' => '[email protected]')); 

只記得改用以下。

Route::get('logout', array('uses' => '[email protected]')); 

這工作順利。

8

如果你有Laravel 4.2,你可以這樣做:

命令行:

php artisan migrate:make add_remember_token_to_users_table --table="users" 

在此之後打開該文件的應用程序/數據庫/遷移/ 2014_10_16_124421_add_remember_token_to_users_table並編輯這樣說:

public function up() 
{ 
    Schema::table('users', function(Blueprint $table) 
    { 
     $table->rememberToken(); 
    }); 
} 

public function down() 
{ 
    Schema::table('users', function(Blueprint $table) 
    { 
     $table->dropColumn('remember_token'); 
    }); 
} 
+0

「遷移:make」是錯誤的,我們需要鍵入「make:migration」。謝謝你的答案。 –

0

您需要將updated_at列添加到您的SQL表user_tbl中。如果你不想使用它。您也可以關閉模​​型中的時間戳。

1

你的問題,你可以通過空值,或者你可以在你的模型類的PHP文件

public $remember_token=false;