2016-07-26 16 views
0

Ich möchte einen Listener in meinem Laravel-Projekt, die für den Benutzer abmeldet und feuert und Ereignis dann für ein Beispiel eine Umleitung oder das Löschen der Sitzung.Laravel Listener zum Löschen Sitzung beim Abmelden funktioniert nicht

Ich habe diesen Code, den ich den EventServiceProvider.php hinzugefügt:

<?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); 
    } 
} 

Dann habe ich folgenden Code setzt in meinem app/Hörer/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('/'); 
    } 
} 
?> 

Nichts, was ich nach innen setzen Mein ClearSessionAfterUserLogout scheint zu funktionieren. Die Funktion "unloadConfiguration()" kenne ich tatsächlich, weil ich sie an anderen Stellen verwende. (Es löscht einfach eine angegebene Session-Variable). Das Leeren der Sitzung tut auch nichts. Wenn ich mich mit einem anderen Konto anmelde, werden einige Inhalte basierend auf dem, was in der Sitzung für das vorherige Konto war, immer noch geladen.

Also meine Frage: Wie lösche ich alle Sitzungsdaten, wenn der Benutzer abmeldet?

Antwort

1

standardmäßig feuert Laravel ein Illuminate\Auth\Events\Logout Ereignis, so dass Sie sollten stattdessen für sie hören:

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

das gibt mir die folgende Fehlermeldung, wenn ich abzumelden: FatalThrowableError in ClearSessionAfterUserLogout.php Zeile 8: Typ Fehler: Argument 1 an App \ Listeners \ ClearSessionAfterUserLogout übergeben :: handle() muss eine Instanz von App \ Listeners \ Logout sein, Instanz von Illuminate \ Auth \ Events \ Logout gegeben –

+0

Entfernen Sie 'Logout $ event' als Parameter in Ihrem ** handle() ** Methode. Es sollte wie diese 'public function handle() {' sein. – TheFallen

+0

Danke! Das hat es gelöst. Es funktioniert jetzt!!! –