2016-07-26 7 views
0

Laravelプロジェクトにリスナーを配置して、ログアウトしたユーザーとファイアウォールとイベントをリッスンしたい場合は、セッションのリダイレクトやクリアを行います。ログアウト時にセッションをクリアする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); 
    } 
} 

その後、私は私のアプリ/リスナー/ 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変数をクリアするだけです)。セッションのフラッシュも何もしません。別のアカウントでログインすると、以前のアカウントのセッションに基づいて読み込まれたコンテンツがあるためです。

私の質問:ユーザーがログアウトしたときにすべてのセッションデータをクリアするにはどうすればよいですか?デフォルトでは

答えて

1

はLaravelはIlluminate\Auth\Events\Logoutイベントを発生させますので、あなたの代わりにそれを聞く必要があります:私はログアウト時に

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

これは私に次のエラーを与える: タイプのエラー:引数1 FatalThrowableError ClearSessionAfterUserLogout.phpライン8でApp \ Listeners \ ClearSessionAfterUserLogout :: handle()はApp \ Listeners \ Logoutのインスタンスである必要があります。Illuminate \ Auth \ Events \ Logoutのインスタンスが指定されています –

+0

** handle()内のパラメータメーターとして 'Logout $ event'を削除します。 ** 方法。これは 'public function handle(){'のようになります。 – TheFallen

+0

ありがとうございます!それがそれを解決しました。それは今働いている! –

関連する問題