Laravel重定向,注销无效

时间:2014-04-23 11:11:32

标签: php authentication redirect laravel laravel-4

我正在使用laravel 4框架。当我在Auth :: logout()之后使用重定向时,重定向不起作用。我也使用了View :: make(),但同样的“哎呀,看起来像是出了问题。”错误抛出。

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) 

6 个答案:

答案 0 :(得分:52)

您可能缺少users表的remember_token。

请参阅:http://laravel.com/docs/upgrade#upgrade-4.1.26

Laravel需要“可空的remember_token VARCHAR(100),TEXT或等同于你的用户表。”

更新新文档

Laravel 4.2及更高版本现在有一个方法可以与模式构建器一起使用来添加此列。

$table->rememberToken();

Laravel Docs - Schema - Adding Columns

答案 1 :(得分:8)

如果你有Laravel 4.2,你可以这样做:

命令行:

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

在此之后打开文件app / database / migrations / 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');
    });
}

答案 2 :(得分:8)

对于您的问题,您可以传递null值,或者您可以在模型php文件中删除remember_token值

public $remember_token=false;

答案 3 :(得分:1)

这里有一个示例代码,说明我如何处理使用Laravel 4在我的系统上注销用户。我不确定为什么你的工作不起作用,很高兴看到你的路由,以及触发了你的路由的html代码注销过程也是如此。

路线

Route::get('logout', array('uses'=>'UserController@logout'));

触发注销的HTML按钮/链接

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

控制器功能处理注销

public function logout(){

    Auth::logout();

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

你来了!您应该用路由名称和控制器功能替换它。这应该工作!如果没有,请发布您的路线和HTML代码!干杯!

答案 4 :(得分:1)

由于当前的Laravel更新,用户表中应该有一个“remember_token”列。这解决了这个问题。

答案 5 :(得分:0)

我了解到我在应用程序中遇到了注销错误,因为我正在使用

Route::post('logout', array('uses' => 'SessionController@doLogout'));

请记住改为使用以下内容。

Route::get('logout', array('uses' => 'SessionController@doLogout'));

这很顺利。