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.
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.
Ich habe jetzt EventServiceProvided.php geöffnet und das Array $listen
wie folgt modifiziert:
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!
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.
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
:
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.
Wir müssen das Ereignis dem Ereignishandler in der Klasse EventServiceProvider
im Verzeichnis app/Providers
zuordnen.
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:
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.