【问题标题】:Laravel redirect with logout not workingLaravel 重定向与注销不起作用
【发布时间】:2023-03-10 22:13:01
【问题描述】:

我正在使用 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) 

【问题讨论】:

  • 你能显示路线吗? users.login 视图是否存在?因为您的代码看起来与我的注销方法非常相似...
  • 为了在您的开发机器上显示有用的调试信息,您应该将'debug' =&gt; true' 添加到app/config/app.php'(或app/config/local/app.php')和/或将您的开发机器的主机名添加到环境中- bootstrap/start.php 中的数组。请查看laravel.com/docs/configuration#environment-configuration 了解更多详情。
  • @pc-shooter 是的,该视图存在。没有 Auth::logout() 的重定向工作正常
  • 看看 Quasdunk 的评论
  • @winnyboy5 总是乐于提供帮助 :) 还要确保为您的生产环境禁用任何类型的直接调试输出(您应该将其记录下来),这样您的用户只会看到“哎呀,看起来像出现问题”消息,而不是一些敏感数据。

标签: php authentication redirect laravel laravel-4


【解决方案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 代码!干杯!

【讨论】:

  • 不,它没有用。我认为问题在于 getLogout 函数
  • 太棒了!很高兴你修好了!干杯!
【解决方案2】:

您可能缺少 users 表的 remember_token。

见:http://laravel.com/docs/upgrade#upgrade-4.1.26

Laravel 需要“VARCHAR(100)、TEXT 或等效于您的 users 表的可空的 remember_token。”

更新新文档

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

$table-&gt;rememberToken();

Laravel Docs - Schema - Adding Columns

【讨论】:

  • 如果更详细 - 你必须编辑你的迁移文件并添加: $table->text('remember_token')->nullable();然后重新运行迁移
  • 这可以像时间戳一样以自动方式完成吗? ($table->timestamps();)
  • @TomBusby 实际上 Laravel 4.2 的文档现在有一个用于此令牌的方法。 $table->rememberToken();
  • 以前有这个问题。文档没有明确说明此方法适用于 4.2 及更高版本。我试图在 4.1.26 上使用它
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我得知我的应用程序出现注销错误,因为我正在使用

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

    请记住改用以下内容。

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

    这很顺利。

    【讨论】:

      【解决方案5】:

      如果你有 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');
          });
      }
      

      【讨论】:

      • "migrate:make" 是错误的,我们需要输入 "make:migration"。谢谢你的回答。
      【解决方案6】:

      您需要将 updated_at 列添加到 SQL 表 user_tbl 中。如果您不想使用它。您还可以关闭模​​型中的时间戳。

      【讨论】:

        【解决方案7】:

        对于您的问题,您可以传递 null 值,或者您可以将模型 php 文件中的 remember_token 值作为

        public $remember_token=false;
        

        【讨论】:

          猜你喜欢
          • 2023-04-08
          • 2016-08-23
          • 2016-10-28
          • 2013-09-15
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          • 2017-01-07
          • 1970-01-01
          相关资源
          最近更新 更多