Login nur, wenn der Benutzer aktiv mit Laravel
Zur Zeit arbeite ich an meinem Laravel-app und um spam vorzubeugen habe ich beschlossen, dass nur aktive Benutzer anmelden können.
Ich bin derzeit mit Laravel-login-system wie in Laravel die offizielle website tutorial, hier ist mein Formular Aktion:
<form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/login') }}">
Das funktioniert ganz gut, allerdings möchte ich den user "aktiv", wenn nicht aktiv, es würde umgeleitet werden, um die Aktivierungs-Seite, sonst würde der login.
Gibt es eine einfache Möglichkeit dies zu tun, oder bin ich verpflichtet, einen neuen controller, Routen und mehr Prüfungen? Danke.
Edit: Vergaß zu erwähnen, dass ich eine 'aktiv' - Spalte in meiner Datenbank.
InformationsquelleAutor der Frage Micael Sousa | 2015-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laravel 5.4 /5.5
Überschreiben die Standard -
login()
Funktion, indem Sie diese Funktion in IhremLoginController
:Überschreiben der
login()
Methode auf diese Weise wird empfohlen, über viele der anderen Antworten auf diese Frage, weil es können Sie immer noch verwenden viele der fortschrittlichen Authentifizierungs-Funktionalität von Laravel 5.4+ wie login-Drosselung, die mehrere Authentifizierungs-guard-Treiber/Provider, etc. während immer noch so dass Sie zum festlegen einer benutzerdefinierten Fehlermeldung.Laravel 5.3
Ändern oder außer Kraft setzen Ihr
postLogin()
Funktion in IhremAuthController
wie folgt Aussehen:Dieser code leitet zurück auf die login-Seite mit einer Fehlermeldung angezeigt, die der Benutzer inaktiv. Wenn Sie möchten, einen redirect zu einer Seite Authentifizierung ändern Sie die Zeile, die ich markiert mit dem Kommentar
Change this to redirect elsewhere
.InformationsquelleAutor der Antwort BrokenBinary
In Laravel 5.4 öffnen Auth/LoginController.php
und fügen Sie diese Funktion:
Werden und fertig..!
InformationsquelleAutor der Antwort Raja Amer Khan
Diese Lösung basiert auf Can Celik die Idee und die wurde getestet mit Laravel 5.3.
Den letzten zwei durch Komma getrennte Parameter (
active,1
) fungieren als WHERE-Klausel (WHERE active = '1'
) und kann alternativ auch so geschrieben:Normalerweise ist die Validierung der Methode nur geprüft, wenn die E-Mail-und Passwort-Felder ausgefüllt sind. Mit der änderung oben verlangen wir, dass eine bestimmte E-Mail-Adresse gefunden wird, in eine DB-Zeile mit
active
Wert auf 1 gesetzt.UPDATE (getestet mit Laravel 5.5):
Können Sie auch anpassen, die Meldung:
Beachten Sie, dass die obige Nachricht wird angezeigt, wenn eine bestimmte E-Mail-Adresse nicht existiert oder wenn das Konto deaktiviert ist.
InformationsquelleAutor der Antwort Mateusz
im AuthController Methode überschreiben getCredentials wie diese:
stellen Sie sicher, dass die Spalte aktiv in der Tabelle user...
InformationsquelleAutor der Antwort pls13
Sie nicht haben, um das überschreiben der gesamten Funktion. Sie können ändern Sie einfach die Prüfung in der AuthController zu erreichen, dass das hinzufügen "vorhanden ist: - Tabelle,Spalte" validation.
Nehmen wir an, Sie haben eine Tabelle Benutzer mit E-Mail,Passwort und aktive Felder.
Hier ist die validotor Funktion sollte dann so Aussehen AuthController.php
oder wenn Sie mit den weichen löscht diese sollten auch funktionieren.
Können Sie auch überprüfen Sie heraus die Validierungsregel unter diesem link http://laravel.com/docs/5.1/validation#rule-exists
InformationsquelleAutor der Antwort Can Celik
Ich check user ist actived durch überschreiben sendLoginResponse Funktion in LoginController
InformationsquelleAutor der Antwort Mohsen
Wenn jemand nutzt ajax-request auf die login-und will, um benutzerdefinierte Nachricht, hier ist, wie ich dies erreicht, in login-controller:
login () - Funktion
Und andere Funktionen
InformationsquelleAutor der Antwort Piotr Jankiewicz
Falls sich jemand kam hierher auf der Suche nach Informationen über Laravel 5.4/5.5, und das kann für eine benutzerdefinierte Nachricht, die nur für dieses Szenario (nicht eine kombinierte Meldung) hier ist die Antwort von https://laracasts.com/discuss/channels/laravel/user-account-status
Überschreiben das "authentifizierte" Verfahren in Ihrem " app/Http/Controllers/Auth/LoginController.php` Datei:
InformationsquelleAutor der Antwort daprezjer