【问题标题】:Laravel Listener to clear Session on logout is not workingLaravel 侦听器在注销时清除会话不起作用
【发布时间】:2016-11-29 22:25:12
【问题描述】:

我想在我的 Laravel 项目中放置一个监听器,它监听用户注销并触发和事件,例如重定向或清除会话。

我将这段代码添加到 EventServiceProvider.php:

<?php

namespace App\Providers;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\SomeEvent' => [
            'App\Listeners\EventListener',
        ],
        'App\Listeners\Logout' => [
            'App\Listeners\ClearSessionAfterUserLogout'
        ],
    ];

    /**
     * Register any other events for your application.
     *
     * @param  \Illuminate\Contracts\Events\Dispatcher  $events
     * @return void
     */
    public function boot(DispatcherContract $events)
    {
        parent::boot($events);
    }
}

然后,我在我的 app/Listeners/ClearSessionAfterUserLogout 中放入了以下代码:

<?php
namespace App\Listeners;
use Session;
use App\Classes\Helper;

class ClearSessionAfterUserLogout{
    public function handle(Logout $event){
        Session::flush();
        Session::set('configuration', NULL);
        Helper::unloadConfiguration();
        return redirect('/');
    }
}
?>

我在 ClearSessionAfterUserLogout 中放入的任何内容似乎都不起作用。我知道一个事实的函数“unloadConfiguration()”是有效的,因为我在其他地方使用它。 (它只是清除指定的 Session 变量)。刷新会话也无济于事。因为当我使用另一个帐户登录时,仍然会根据前一个帐户的会话中的内容加载某些内容。

所以我的问题是:如何在用户注销时清除所有会话数据?

【问题讨论】:

    标签: laravel session events listener


    【解决方案1】:

    默认情况下,Laravel 会触发 Illuminate\Auth\Events\Logout 事件,因此您应该改为监听它:

    protected $listen = [
        'Illuminate\Auth\Events\Logout' => [
            'App\Listeners\ClearSessionAfterUserLogout',
        ],
    ];
    

    【讨论】:

    • 当我注销时出现以下错误:ClearSessionAfterUserLogout.php 第 8 行中的 FatalThrowableError:类型错误:传递给 App\Listeners\ClearSessionAfterUserLogout::handle() 的参数 1 必须是 App\ 的实例Listeners\Logout,给定的 Illuminate\Auth\Events\Logout 实例
    • 在您的 handle() 方法中删除 Logout $event 作为参数。应该是这样的public function handle(){
    猜你喜欢
    • 2018-05-31
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2016-06-02
    • 2015-03-03
    • 2014-08-01
    相关资源
    最近更新 更多