login-event-handling in laravel 5
ich versuche, Haken zu dem login sogar in meinem L5-app zu setzen, Letzte login-Zeit und IP-Adresse. ich kann es mit dem folgenden:
Event::listen('auth.login', function($event)
{
Auth::user()->last_login = new DateTime;
Auth::user()->last_login_ip = Request::getClientIp();
Auth::user()->save();
});
allerdings Frage ich mich, was der beste Weg, dies zu tun in L5 ist mit der Ereignis-handler-Objekt. ich habe versucht, erstellen Sie einen Ereignishandler hinzufügen und auth.login als array-Schlüssel in den Veranstaltungen service-provider, aber das hat nicht funktioniert. ich bin nicht sicher, ob das möglich ist oder nicht mit der auth.login-Ereignis. wenn es nicht, wo ist der geeignetste Ort, um die oben genannten code. für die Prüfung, ich habe es in meiner routes.php Datei, aber ich weiß nicht, wo es sein sollte.
- Bitte das nächste mal die Arbeit machen mit Anleitung 🙂 vorausgesetzt Antwort von @kstev ist die beste Aufnahme, die Sie bekam. Ich weiß, Handbuch ist nicht ein walkthru, aber es ist wirklich nützlich, laravel.com/docs/5.0/events
- ich habe mir das Handbuch, ich war einfach nicht sicher, wie Sie Sie auf Haken auf den vorhandenen Fall, dass laravel feuert. die unten Antwort von kstev ist sehr gründlich, aber ich bin immer noch verwirrt, wie und wo Sie hinzufügen, die sogar abgefeuert werden. als ich die Verfolgung der auth-controller und versuchen Sie zu finden, wo die Anmeldung erfolgreich ist, konnte ich nicht.....
- Sie haben es selbst zu tun, ich denke, die Ereignisse werden nur ausgelöst, auf beredte einfügen, aktualisieren, löschen ich können nicht finden Sie die komplette Liste :/ nur für L3. Siehe dieses tutorial laracasts.com/lessons/laravel-5-events und Diskussion!
- die string-basierte Ereignis in meinem obigen code funktioniert mit 'auth.login', aber ich war nicht in der Lage, um es zu registrieren, in der event-service-provider und das ist, wo die Verwirrung begann. ich versuche zu tun, 'auth.login' => [ UpdateUserMetaData::class ]
- Endlich habe ich verstanden, was Sie Fragen die ganze Zeit über 😉 siehe meine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In laravel 5.2; auth.login funktioniert nicht..., die folgenden werden verwendet:
Wie in der Dokumentation erwähnt hier
EDIT: das funktioniert nur in 5.0.* und 5.1.*.
Für den 5.2.* Lösung siehe JuLiAnc Antwort unten.
nach der Arbeit mit beiden vorgeschlagenen Antworten, und einige mehr Forschung, die ich endlich herausgefunden, wie dies zu tun die Weise, die ich versuchte auf den ersten.
lief ich die folgenden artisan Befehl
Dann veränderte ich die generierte Klasse entfernen der import der Event-Klasse und und importiert die Benutzer-Modell. Auch ich ging
User $user
und$remember
an die handle-Methode, da bei der auth.login-Ereignis ausgelöst wird, das ist, was übergeben wird.nun öffnete ich EventServiceProvided.php und Sie veränderten die
$listen
array wie folgt:merkte ich, sollte dies nicht funktionieren, müssen Sie möglicherweise
Dort gehen wir! wir können jetzt reagieren, um die Benutzer-Anmeldung mittels auth.login-event mit einem event-handler-Klasse!
Vorsichtig sein, über Fragen , was der beste Weg, um X zu tun ist, weil Laravel, insbesondere, bietet viele Möglichkeiten, die gleiche Aufgabe-einige sind besser als andere in bestimmten Situationen.
Sich ein Blick auf die Laravel Dokumentation, ich persönlich würde mit dem "Basis-Nutzung" wie es scheint, entsprechend der Verwendung, falls Sie angegeben haben.
Wenn wir führen Sie die folgenden Handwerker-Befehl können wir generieren eine Vorlage für die UserLoggedIn Veranstaltung.
(man beachte die Vergangenheitsform, weil die Ereignisse passieren, und dann die Abonnenten benachrichtigt werden, der das Ereignis stattgefunden haben)
(Hinweis 2: die
app
string in namespaces ist es, was Laravel nutzt out of the box, ist es wahrscheinlich anders für Sie, wenn Sie ausgeführt haben diephp artisan app:name
Befehl)Folgende Klasse generiert für uns:
Wenn wir noch eine
userId
parameter an den Konstruktor übergeben, dann wird das Ereignis nicht benötigen, um wissen über die Auth-Fassade/Guard-Vertrag. Dies bedeutet, dass unsereUserLoggedIn
Ereignis-code ist nicht eng gekoppelt, Eloquent oder was immer authentication framework Sie sich entscheiden, nutzen Sie in Ihrer app. Wie auch immer, lassen Sie uns hinzufügen, dassuserId
parameter.Jetzt sind Sie wahrscheinlich Fragen, gut, dass ' s groß und alle, aber, wie wir handeln, auf dieses Ereignis? Gute Frage! Wir müssen erstellen Sie eine Ereignisprozedur zu verarbeiten, wenn dieses Ereignis ausgelöst wird. Das machen wir jetzt mit Artisan:
Benennen wir unsere neue event-handler
UpdateUserMetaData
und sagen, Artisan, dass der Fall, den wir behandeln wollen ist derUserLoggedIn
Veranstaltung.Nun haben wir einigen code, der aussieht wie das innere des
app/Handlers/Events/UpdateUserMetaData.php
:Können wir aktualisieren die handle-Methode, um in der Lage sein, um dieses Ereignis zu behandeln, wie Sie oben angegeben ganz einfach:
Als eine Randnotiz, wenn Sie nicht vertraut sind mit Carbon, vielleicht möchten Sie sich in mit es so nutzen Sie seine fantastische API wie können Sie mit Beredter ist
created_at
undupdated_at
timestamp-Felder auf die meisten Modelle. Hier ist ein link für Sie, wie Sie sagen Beredt, welche Felder verwendet werden sollten, mit Kohlenstoff: http://laravel.com/docs/master/eloquent#date-mutators.Es gibt zwei Letzte Schritte, die wir durchführen müssen, bevor dieser code funktioniert in deiner Laravel-app.
Benötigen wir zur Zuordnung der Veranstaltung zu den event-handler in der
EventServiceProvider
Klasse unter derapp/Providers
Verzeichnis.Müssen wir das Ereignis ausgelöst nach der Anmeldung.
Abgeschlossen der erste Schritt, müssen wir nur noch unsere event-Klassen zu
$listeners
Eigenschaft inapp/Providers/EventServiceProvder.php
etwa so:Den oben genannten arbeiten wird vorausgesetzt, Sie importieren Sie die Klassen innerhalb der
EventServiceProvider
Klasse, und Sie sind mit PHP 5.5. Wenn Sie mit einer niedrigeren PHP-version, die Sie benötigen, um den vollständigen Pfad zu jeder Klasse als eine Zeichenfolge wie diese:'app/Events/UserLoggedIn'
und'app/Handlers/Events/UpdateUserMetaData'
.Den
$listeners
array-Karten-Ereignisse zu Ihren entsprechenden Handler.Okay, nun zum letzten Schritt! In Ihrer code-Basis, die Stelle suchen, wo der Benutzer authentifiziert ist, und fügen Sie die folgenden:
Und wir sind fertig! Getestet habe ich diesen code, wie ich schrieb dieser Antwort, fühlen Sie sich frei zu Fragen, follow-up-Fragen, wenn Sie welche haben.
$ php artisan event:generate
hat nicht erzeugen sowohl handler und event wohl ein bug?event:generate
Befehl, ich bevorzuge nur, um es allen ein bisschen expliziter anstatt die Handwerker ganze Arbeit für mich, nur um sicherzustellen, dass alles geschieht, wie ich erwarte. Ich tatsächlich öffnete diese Frage erneut in einem neuen tab über 75% der Weise durch, um sicherzustellen, dass niemand anderes gepostet hatte, eine Antwort, haha. Ich würde gerne sehen, dass alternative Ansätze, wenn Sie eine haben!php artisan event:generate
ist generieren, class alle Ereignisse oder Handler, die aufgeführt sind in Ihrer EventServiceProvider5.2 für so etwas
in den Hörer:
In EventServiceProvider.php :
Request
innenhandle
Funktion?Öffnen EventServiceProvider.php und in der boot-Methode können Sie hören für
'auth.login'
Veranstaltung per callback.Möchten Sie möglicherweise erstellen Sie listener, so dass Sie bewegen callback-Funktion irgendwo anders. Tun, dass wir nach http://laravel.com/docs/4.2/events#using-classes-as-listeners
habe es nur auf diese Weise
hier ist mein Ansatz:
Habe ich getan, dass Ihr so ein event handler auf, wenn Benutzer angemeldet mit:
1) Führen Sie die folgenden artian Befehl
php artisan make:listener Auth/UserLoggedIn --event='Illuminate\Auth\Events\Login'
*Es wird ein Listener:
UserLoggedIn
im Ordnerapp\Listeners\Auth\
2), Dann müssen Sie diese Hörer in Ihren
EventServiceProvider
:**Endlich können Sie sich anmelden, wenn der Benutzer eingeloggt
handle
- Funktion befindet sich aufUserLoggedIn
Hörer:**Sie können alle diese Ereignisse in Ihrem
EventServiceProvider
:https://laravel.com/docs/5.8/authentication#events