Login-Ereignisbehandlung in Laravel 5

8

Ich versuche, mich mit dem Login zu verbinden, sogar in meiner L5-App, um die letzte Login-Zeit und IP-Adresse festzulegen. Ich kann es mit dem folgenden funktionieren lassen:

%Vor%

Ich frage mich jedoch, was der beste Weg ist, dies in L5 mit dem Event-Handler-Objekt zu tun. Ich habe versucht, einen Event-Handler zu erstellen und auth.login als Array-Schlüssel im Ereignisdienstanbieter hinzuzufügen, aber das hat nicht funktioniert. Ich bin nicht sicher, ob das mit dem Ereignis auth.login möglich ist oder nicht. Wenn es nicht ist, wo ist der am besten geeignete Ort, um den obigen Code zu setzen. Zum Testen lege ich es in meine routes.php-Datei, aber ich weiß, dass es nicht dort ist, wo es sein sollte.

    
Erik 10.03.2015, 17:19
quelle

6 Antworten

18

EDIT: funktioniert nur in 5.0. * und 5.1. *.

Für die 5.2. * Lösung siehe JuLiAnc Antwort unten.

Nachdem ich mit den beiden vorgeschlagenen Antworten und einigen weiteren Untersuchungen gearbeitet habe, habe ich endlich herausgefunden, wie ich das so machen kann, wie ich es zuerst versucht habe.

Ich habe den folgenden Handwerkerbefehl ausgeführt

%Vor%

Dann habe ich die generierte Klasse geändert, den Import der Event-Klasse entfernt und das Benutzermodell importiert. Ich übergebe auch User $user und $remember an die Handle-Methode, seit wann das auth.login-Ereignis ausgelöst wird, das ist, was übergeben wird.

%Vor%

Ich habe jetzt EventServiceProvided.php geöffnet und das Array $listen wie folgt modifiziert:

%Vor%

Ich habe gemerkt, wenn das nicht zuerst funktioniert, müssen Sie möglicherweise

%Vor%

Da gehen wir! Wir können jetzt auf den Benutzer antworten, der sich über das Ereignis auth.login mit einer Event-Handler-Klasse anmeldet! ​​

    
Erik 11.03.2015, 02:25
quelle
18

In Laravel 5.2; auth.login funktioniert nicht ... Folgendes muss verwendet werden:

%Vor%

Wie in der Dokumentation hier

angegeben     
JuLiAnc 30.01.2016 06:02
quelle
14

Seien Sie vorsichtig, wenn Sie nach dem besten Weg fragen, X zu tun , denn insbesondere Laravel bietet viele Möglichkeiten, die gleiche Aufgabe zu erfüllen - manche sind in bestimmten Situationen besser als andere.

Schauen wir uns die Laravel-Dokumentation an, persönlich würde ich mit der "Basic Usage" gehen es scheint zu dem von Ihnen angegebenen Anwendungsfall zu passen.

Wenn wir den folgenden Artisan-Befehl ausführen, können wir eine Vorlage für das UserLoggedIn-Ereignis generieren.

%Vor%

(Beachten Sie die Vergangenheitsform, da Ereignisse passieren, und dann werden die Abonnenten über das stattfindende Ereignis benachrichtigt)

(Anmerkung 2: Die app -Zeichenkette in Namespaces ist das, was Laravel aus der Box verwendet, es ist wahrscheinlich anders für Sie, wenn Sie den Befehl php artisan app:name ausgeführt haben)

Die folgende Klasse wird für uns generiert:

%Vor%

Wenn wir dem Konstruktor den Parameter userId hinzufügen, muss das Ereignis nicht über den Auth-Facade / Guard-Vertrag informiert werden. Das bedeutet, dass unser UserLoggedIn -Ereigniscode nicht eng an Eloquent gekoppelt ist oder welches Authentifizierungsframework Sie in Ihrer App verwenden möchten. Wie auch immer, fügen wir den Parameter userId hinzu.

%Vor%

Jetzt werden Sie sich wahrscheinlich fragen, nun, das ist großartig und alles, aber wie können wir bei diesem Event handeln? Gute Frage! Wir müssen einen Event-Handler erstellen, der behandelt wird, wenn dieses Ereignis ausgelöst wird. Machen wir das jetzt mit Artisan:

%Vor%

Wir nennen unseren neuen Event-Handler UpdateUserMetaData und teilen Artisan mit, dass das Ereignis, das wir behandeln möchten, das UserLoggedIn -Ereignis ist.

Nun haben wir einen Code, der innerhalb von app/Handlers/Events/UpdateUserMetaData.php :

aussieht %Vor%

Wir können die Handle-Methode aktualisieren, um dieses Ereignis wie oben beschrieben ganz einfach handhaben zu können:

%Vor%

Als Nebenbemerkung, wenn Sie nicht mit Carbon vertraut sind, sollten Sie sich vielleicht damit befassen Sie können die Vorteile seiner fantastischen API nutzen, wie Sie es mit den Eloquent-Feldern created_at und updated_at auf den meisten Modellen tun können. Hier ist ein Link, um zu erfahren, welche Felder mit Carbon verwendet werden sollten: Ссылка .

Es gibt zwei letzte Schritte, die wir ausführen müssen, bevor dieser Code in Ihrer Laravel App funktioniert.

  1. Wir müssen das Ereignis dem Ereignishandler in der Klasse EventServiceProvider im Verzeichnis app/Providers zuordnen.

  2. Wir müssen die Veranstaltung nach dem Login auslösen.

Um den ersten Schritt abzuschließen, müssen wir nur noch unsere Ereignisklassen zur $listeners -Eigenschaft in app/Providers/EventServiceProvder.php hinzufügen:

%Vor%

Das obige funktioniert, vorausgesetzt Sie importieren die Klassen in der Klasse EventServiceProvider und Sie verwenden PHP 5.5. Wenn Sie eine niedrigere PHP-Version verwenden, müssen Sie den vollständigen Pfad zu jeder Klasse wie folgt angeben: 'app/Events/UserLoggedIn' und 'app/Handlers/Events/UpdateUserMetaData' .

Das Array $listeners ordnet Ereignisse ihren jeweiligen Handlern zu.

Okay, jetzt für den letzten Schritt! Suchen Sie in Ihrer Codebasis den Ort, an dem der Benutzer authentifiziert wurde, und fügen Sie Folgendes hinzu:

%Vor%

Und wir sind fertig! Ich habe diesen Code getestet, als ich diese Antwort geschrieben habe, fühlen Sie sich frei, Follow-up-Fragen zu stellen, wenn Sie welche haben.

    
kstev 10.03.2015 18:40
quelle
9

Für 5.2 so etwas

in Listeners:

%Vor%

In EventServiceProvider.php:

%Vor%     
goldie 10.04.2016 19:47
quelle
2

Öffnen Sie EventServiceProvider.php und in der Boot-Methode können Sie auf 'auth.login' event per Callback warten.

%Vor%

Vielleicht möchten Sie Listener erstellen, damit Sie die Callback-Funktion woanders hin verschieben. Tun Sie das nach diesem Ссылка

    
Kyslik 10.03.2015 21:40
quelle
0

hat es gerade so gemacht

%Vor%     
juergen 27.07.2015 07:47
quelle

Tags und Links