Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel

Authentifizierung mit Laravel 4

by
Read Time:23 minsLanguages:

German (Deutsch) translation by Valentina (you can also view the original English article)

Eine Authentifizierung ist für praktisch jede Art von Webanwendung erforderlich. In diesem Tutorial möchte ich Ihnen zeigen, wie Sie mit Laravel 4 eine kleine Authentifizierung-App erstellen können, ein Hauptlayout erstellen, Benutzer registrieren, an- und abmelden und Routen durch Filter schützen. Wir müssen viel Code abdecken, also fangen wir an!


Installation

Beginnen wir dieses Tutorial, indem wir alles einrichten, was wir zum Erstellen unserer Authentifizierung-App benötigen. Wir müssen zuerst Laravel und alle seine Abhängigkeiten herunterladen und installieren. Wir werden auch den beliebten Twitter Bootstrap verwenden, um unsere App hübsch aussehen zu lassen. Dann nehmen wir ein bisschen Konfiguration vor, verbinden uns mit unserer Datenbank und erstellen die erforderliche Tabelle und starten schließlich unseren Server, um sicherzustellen, dass alles wie erwartet funktioniert.

Herunterladen

Lassen Sie uns Composer verwenden, um eine neue Laravel-Anwendung zu erstellen. Ich werde zuerst die Verzeichnisse in meinen Sites-Ordner ändern, da ich dort alle meine Apps am liebsten speichere:

Führen Sie dann den folgenden Befehl aus, um Laravel (ich habe meine App laravel-auth genannt) und alle ihre Abhängigkeiten herunterzuladen und zu installieren:

Twitter Bootstrap hinzufügen

Um zu verhindern, dass unsere App das schreckliche und hässliche Schicksal erleidet, wirklich von Ihnen gestylt zu werden, werden wir den Twitter-Bootstrap in unsere composer.json-Datei aufnehmen:

... und dann können wir es installieren:

Wenn Sie nun Ihre App in Ihrem Texteditor öffnen, verwende ich Sublime, und wenn Sie im vendor-Ordner nachsehen, sehen Sie, dass wir hier den Twitter Bootstrap haben.

laravel-auth-twitter-bootstrap-installedlaravel-auth-twitter-bootstrap-installedlaravel-auth-twitter-bootstrap-installed

Jetzt besteht unser Twitter Bootstrap standardmäßig aus .less-Dateien und bevor wir sie in .CSS-Dateien kompilieren können, müssen wir alle Bootstrap-Abhängigkeiten installieren. Dadurch können wir auch das im Twitter-Bootstrap enthaltene Makefile für die Arbeit mit dem Framework (z. B. das Kompilieren von Dateien und das Ausführen von Tests) verwenden.

Hinweis: Sie benötigen npm, um diese Abhängigkeiten zu installieren.

Ändern wir in Ihrem Terminal die Verzeichnisse in vendor/twitter/bootstrap und führen Sie npm install aus:

Wenn alles bereit ist, können wir jetzt das Makefile verwenden, um die .less-Dateien in CSS zu kompilieren. Lassen Sie uns den folgenden Befehl ausführen:

Sie sollten jetzt feststellen, dass wir zwei neue Ordner in unserem vendor/twitter/bootstrap-Verzeichnis namens bootstrap/css haben, die unsere Bootstrap-CSS-Dateien enthalten.

laravel-auth-css-compiledlaravel-auth-css-compiledlaravel-auth-css-compiled

Jetzt können wir die Bootstrap-CSS-Dateien später in unserem Layout verwenden, um unsere App zu stylen.

Aber wir haben ein Problem! Diese CSS-Dateien müssen öffentlich zugänglich sein, derzeit befinden sie sich in unserem vendor-Ordner. Aber das ist eine einfache Lösung! Wir können artisan verwenden, um sie in unseren public/packages-Ordner zu publish (zu verschieben), auf diese Weise können wir die erforderlichen CSS-Dateien in unser Hauptlayout-Template einbinden, das wir später erstellen werden.

Zuerst wechseln wir zurück in das Stammverzeichnis unserer Laravel-Anwendung und führen dann artisan aus, um die Dateien zu verschieben:

Der artisan-Befehl asset:publish ermöglicht es uns, eine --path-Option bereitzustellen, für welche Dateien wir in unser public/packages-Verzeichnis verschieben möchten. In diesem Fall weisen wir es an, alle zuvor kompilierten CSS-Dateien zu veröffentlichen und sie in zwei neuen Ordnern namens bootstrap/css zu platzieren. Ihr public-Verzeichnis sollte jetzt wie im Screenshot unten aussehen, wobei unsere Twitter Bootstrap CSS-Dateien jetzt öffentlich zugänglich sind:

laravel-auth-bootstrap-css-moved-to-publiclaravel-auth-bootstrap-css-moved-to-publiclaravel-auth-bootstrap-css-moved-to-public

Berechtigungen festlegen

Als nächstes müssen wir sicherstellen, dass unser Webserver über die entsprechenden Berechtigungen zum Schreiben in unser Anwendungs-app/storage-Verzeichnis verfügt. Führen Sie in Ihrer App den folgenden Befehl aus:

Verbinden Sie sich mit unserer Datenbank

Als Nächstes benötigen wir eine Datenbank, in der unsere Authentifizierungs-App unsere Benutzer speichern kann. Starten Sie also die Datenbank, mit der Sie sich wohler fühlen, persönlich bevorzuge ich MySQL zusammen mit PHPMyAdmin. Ich habe eine neue, leere Datenbank namens laravel-auth erstellt.

laravel-auth-database-creationlaravel-auth-database-creationlaravel-auth-database-creation

Verbinden wir nun diese Datenbank mit unserer Anwendung. Öffnen Sie unter app/config die database.php. Geben Sie Ihre entsprechenden Datenbankanmeldeinformationen ein, meine sind wie folgt:

Erstellen Sie die Benutzertabelle

Wenn unsere Datenbank erstellt ist, wird sie nicht sehr nützlich sein, es sei denn, wir haben eine Tabelle zum Speichern unserer Benutzer. Lassen Sie uns mit artisan eine neue Migrationsdatei mit dem Namen erstellen: create-users-table:

Bearbeiten wir nun unsere neu erstellte Migrationsdatei, um unsere users-Tabelle mit dem Schema Builder zu erstellen. Wir beginnen mit der up()-Methode:

Dadurch wird eine Tabelle mit dem Namen users erstellt, die ein id-Feld als Primärschlüssel, firstname- und  lastname-Felder, ein email-Feld, das erfordert, dass die E-Mail eindeutig ist, und schließlich ein Feld für das password (muss mindestens 64 Zeichen lang sein) Länge) sowie einige timestamps.

Jetzt müssen wir die Methode down() ausfüllen, falls wir unsere Migration rückgängig machen müssen, um die users-Tabelle zu löschen:

Und jetzt können wir die Migration ausführen, um unsere users-Tabelle zu erstellen:

Server starten und testen

Okay, unsere Authentifizierungsanwendung kommt gut voran. Wir haben einiges vorbereitet, starten wir unseren Server und sehen wir uns unsere App im Browser an:

Super, der Server startet und wir sehen unsere Homepage:

laravel-auth-home-pagelaravel-auth-home-pagelaravel-auth-home-page

Die App hübsch aussehen lassen

Bevor wir weitermachen, ist es an der Zeit, eine Hauptlayoutdatei zu erstellen, die den Twitter Bootstrap verwendet, um unserer Authentifizierungsanwendung ein wenig Stil zu verleihen!

Erstellen einer Hauptlayoutdatei

Erstellen Sie unter app/views/ einen neuen Ordner namens layouts und erstellen Sie darin eine neue Datei namens main.blade.php und platzieren wir sie in der folgenden grundlegenden HTML-Struktur:

Einbinden der CSS-Dateien

Als nächstes müssen wir unsere Bootstrap-CSS-Datei sowie unsere eigene main-CSS-Datei in unserem head-Tag direkt unter unserem title verlinken:

Jetzt müssen wir nur noch diese main.css-Datei erstellen, in der wir unser eigenes benutzerdefiniertes Styling für unsere App hinzufügen können. Erstellen Sie unter dem public Verzeichnis einen neuen Ordner namens css und erstellen Sie darin eine neue Datei namens main.css.

laravel-auth-add-main-css-filelaravel-auth-add-main-css-filelaravel-auth-add-main-css-file

Fertigstellen des Hauptlayouts

Lassen Sie uns innerhalb unseres body-Tags ein kleines Navigationsmenü mit einigen Links zum Registrieren und Anmelden bei unserer Anwendung erstellen:

Beachten Sie die Verwendung mehrerer Bootstrap-Klassen, um die Navigationsleiste entsprechend zu gestalten. Hier verwenden wir nur ein paar DIVs, um eine ungeordnete Liste von Navigationslinks zu umschließen, ziemlich einfach.

Für unsere Anwendung möchten wir unseren Benutzern einfache Flash-Meldungen geben, z. B. eine Erfolgsmeldung, wenn sich der Benutzer registriert. Wir setzen diese Flash-Nachricht von unserem Controller aus, aber wir werden den Wert der Nachricht hier in unserem Layout wiedergeben. Lassen Sie uns also ein weiteres div mit einer Klasse von .container erstellen und alle verfügbaren Flash-Nachrichten direkt nach unserer Navigationsleiste anzeigen:

Um die Flash-Nachricht anzuzeigen, habe ich zuerst eine Blade if-Anweisung verwendet, um zu überprüfen, ob wir eine Flash-Nachricht anzeigen müssen. Unsere Flash-Nachricht wird in der Session unter message verfügbar sein. Wir können also die Methode Session::has() verwenden, um nach dieser Nachricht zu suchen. Wenn dies als wahr ausgewertet wird, erstellen wir einen Absatz mit der Twitter-Bootstrap-Klasse alert und rufen die Session::get()-Methode auf, um den Wert der Nachricht anzuzeigen.

Lassen Sie uns nun, zumindest für unsere Layout-Datei, eine $content-Variable direkt nach unserer Flash-Nachricht ausgeben. Dadurch können wir unserem Controller mitteilen, dass er diese Layoutdatei verwenden soll, und unsere Ansichten werden anstelle dieser $content-Variablen direkt hier im Layout angezeigt:


Benutzerdefiniertes Styling

Jetzt, da wir unser Layout fertig haben, müssen wir unserer main.css-Datei nur noch ein paar kleine benutzerdefinierte CSS-Regeln hinzufügen, um unser Layout ein wenig mehr anzupassen. Fahren Sie fort und fügen Sie das folgende CSS hinzu, es ist ziemlich selbsterklärend:

Ich habe nur eine kleine Menge Polsterung am oberen Rand des body-Tags hinzugefügt, um zu verhindern, dass unsere Navigationsleiste unseren Hauptinhalt überlappt. Dann ziele ich auf die Bootstrap-Klassen .form-signup und .form-signin ab, die wir auf unsere Registrierungs- und Anmeldeformulare anwenden, um deren Breite festzulegen und auf der Seite zu zentrieren.


Erstellen der Registrierungsseite

Es ist jetzt an der Zeit, den ersten Teil unserer Authentifizierungsanwendung zu erstellen, und das ist unsere Registrierungsseite.

Der Benutzer-Controller

Wir beginnen damit, einen neuen UsersController in unserem app/controllers-Ordner zu erstellen und darin unsere UsersController-Klasse zu definieren:

Als Nächstes teilen wir diesem Controller mit, dass er unser main.blade.php-Layout verwenden soll. Legen Sie oben in unserem Controller die Eigenschaft $layout fest:

Nun benötigen wir in unserem UsersController eine Aktion für unsere Registrierungsseite. Ich habe meine Aktion getRegister genannt:

Hier setzen wir einfach die content-Layout-Eigenschaft (das ist die $content-Variable, die wir in unserer Layout-Datei ausgegeben haben), um eine users.register-Ansichtsdatei anzuzeigen.

Die Benutzer-Controller-Routen

Wenn unser Controller als nächstes erstellt wird, müssen wir die Routen für alle Aktionen einrichten, die wir in unserem Controller erstellen können. In unserer app/routes.php-Datei entfernen wir zuerst die Standardeinstellung / route und fügen dann den folgenden Code hinzu, um unsere UsersController-Routen zu erstellen:

Jedes Mal, wenn wir eine neue Aktion erstellen, ist sie jetzt mit einem URI im folgenden Format verfügbar: /users/actionName. Zum Beispiel haben wir eine getRegister-Aktion, auf die wir mit dem folgenden URI zugreifen können: /users/register.

Beachten Sie, dass wir den "get"-Teil des Aktionsnamens nicht in den URI aufnehmen, "get" ist nur das HTTP-Verb, auf das die Aktion antwortet.

Erstellen der Registeransicht

Erstellen Sie innerhalb von app/views einen neuen Ordner namens users. Dies wird alle Ansichtsdateien unseres UsersController enthalten. Erstellen Sie im users-Ordner eine neue Datei namens register.blade.php und fügen Sie den folgenden Code darin ein:

Hier verwenden wir die Form-Klasse, um unser Registrierungsformular zu erstellen. Zuerst rufen wir die Methode open() auf und übergeben ein Array von Optionen. Wir weisen das Formular an, an eine URI von users/create zu senden, indem wir den url-Schlüssel festlegen. Diese URI wird verwendet, um die Registrierung des Benutzers zu verarbeiten. Wir kümmern uns als nächstes darum. Nachdem wir die url gesetzt haben, geben wir dem Formular eine Klasse von form-signup.

Nach dem Öffnen des Formulars haben wir nur eine h2-Überschrift mit der Klasse .form-signup-heading.

Als Nächstes verwenden wir eine @foreach-Schleife, die alle Fehlermeldungen bei der Formularvalidierung durchläuft und jeden $error in der ungeordneten Liste anzeigt.

Nach den Fehlermeldungen bei der Formularvalidierung erstellen wir mehrere Formulareingabefelder, jedes mit einer Klasse von input-block-level und einem Platzhalterwert. Wir haben Eingaben für die Felder Vorname, Nachname, E-Mail, Passwort und Passwortbestätigung. Das zweite Argument der text()-Methode ist auf null gesetzt, da wir einen placeholder verwenden, müssen wir das value-Attribut der Eingabefelder nicht setzen, also setze ich es in diesem Fall einfach auf null.

Nach den Eingabefeldern erstellen wir dann unseren Senden-Button und wenden mehrere verschiedene Klassen darauf an, damit der Twitter-Bootstrap das Styling für uns übernimmt.

Zuletzt schließen wir das Formular einfach mit der Methode close().

Stellen Sie sicher, dass Sie Ihren Server starten, zu Ihrem bevorzugten Browser wechseln, und wenn wir zu http://localhost:8000/users/register navigieren, sollten Sie Ihre Registrierungsseite sehen:

laravel-auth-register-pagelaravel-auth-register-pagelaravel-auth-register-page

Verarbeitung der Registrierungsformular-Übermittlung

Wenn Sie nun versucht haben, die Felder des Registrierungsformulars auszufüllen und auf die Schaltfläche Registrieren zu klicken, wurden Sie mit einer NotFoundHttpException begrüßt, und dies liegt daran, dass wir keine Route haben, die users/create URI erstellen, da wir keine Aktion haben, um die zu verarbeiten Formulareinreichung. Das ist also unser nächster Schritt!

Erstellen einer postCreate-Aktion

Lassen Sie uns in Ihrem UsersController eine weitere Aktion namens postCreate erstellen:

Jetzt muss diese Aktion die Verarbeitung der Formularübermittlung verarbeiten, indem die Daten validiert und entweder Validierungsfehlermeldungen angezeigt werden, oder sie sollte den neuen Benutzer erstellen, das Kennwort des Benutzers hashen und den Benutzer in der Datenbank speichern.

Formularvalidierung

Beginnen wir mit der Validierung der Daten der Formularübermittlung. Wir müssen zuerst unsere Validierungsregeln erstellen, mit denen wir die Formulardaten validieren. Ich ziehe es vor, meine Validierungsregeln in meinem Modell zu speichern, da dies die Konvention ist, die ich von der Arbeit mit anderen Frameworks gewohnt bin. Standardmäßig wird Laravel mit einem bereits für Sie erstellten User.php-Modell ausgeliefert.

Stellen Sie sicher, dass Sie dieses Benutzermodell nicht löschen oder den bereits vorhandenen Code entfernen, da er neuen Code enthält, der für die ordnungsgemäße Authentifizierung von Laravel 4 erforderlich ist. Ihr Benutzermodell muss UserInterface und RemindableInterface sowie die Methoden getAuthIdentifier() und getAuthPassword() implementieren.

Öffnen Sie unter app/models die Datei User.php und fügen Sie oben den folgenden Code ein:

Hier überprüfe ich die Felder firstname und lastname, um sicherzustellen, dass sie vorhanden sind, nur Alphazeichen enthalten und mindestens zwei Zeichen lang sind. Als Nächstes validiere ich das email-Feld, um sicherzustellen, dass es vorhanden ist, dass es eine gültige E-Mail-Adresse ist und dass es für die Benutzertabelle eindeutig ist, da wir keine doppelten E-Mail-Adressen für unsere Benutzer haben möchten. Zuletzt validiere ich die Felder password und password_confirmation. Ich stelle sicher, dass beide vorhanden sind, nur alphanumerische Zeichen enthalten und zwischen sechs und zwölf Zeichen lang sind. Beachten Sie außerdem die confirmed-Validierungsregel, die sicherstellt, dass das password-Feld genau mit dem übereinstimmenden Feld password_confirmation übereinstimmt, um sicherzustellen, dass die Benutzer das richtige Kennwort eingegeben haben.

Da wir nun unsere Validierungsregeln haben, können wir diese in unserem UsersController verwenden, um die Formularübermittlung zu validieren. Lassen Sie uns in der postCreate-Aktion Ihres UsersController zunächst prüfen, ob die Daten die Validierung bestehen, und fügen Sie den folgenden Code hinzu:

Wir beginnen damit, ein Validator-Objekt namens $validator zu erstellen, indem wir die Methode User::validate() aufrufen. Dies akzeptiert die beiden Argumente, die übermittelte Formulareingabe, die validiert werden soll, und die Validierungsregeln, gegen die die Daten validiert werden sollen. Wir können die übermittelten Formulardaten abrufen, indem wir die Methode Input::all() aufrufen und diese als erstes Argument übergeben. Wir können unsere Validierungsregeln, die wir in unserem User-Modell erstellt haben, abrufen, indem wir auf die statische Eigenschaft User::$rules zugreifen und diese als zweites Argument übergeben.

Nachdem wir unser Validator-Objekt erstellt haben, rufen wir seine Methode passes() auf. Dies gibt entweder true oder false zurück und wir verwenden dies in einer if-Anweisung, um zu überprüfen, ob unsere Daten die Validierung bestanden haben.

Fügen Sie in unserer if-Anweisung den folgenden Code hinzu, wenn die Validierung erfolgreich war:

Solange die vom Benutzer übermittelten Daten die Validierung bestanden haben, erstellen wir eine neue Instanz unseres Benutzermodells: new User; speichern in einer $user-Variablen. Wir können dann das $user-Objekt verwenden und jede der Eigenschaften des Benutzers mithilfe der übermittelten Formulardaten festlegen. Wir können die übermittelten Daten einzeln mit der Methode Input::get('fieldName') abrufen. Dabei ist fieldName der Wert des Felds, das Sie abrufen möchten. Hier haben wir die Felder Vorname, Nachname und E-Mail erfasst, um sie für unseren neuen Benutzer zu verwenden. Wir haben auch den Wert des Passwort-Felds übernommen, aber wir wollen das Passwort nicht nur als Klartext in der Datenbank speichern, also verwenden wir die Hash::make()-Methode, um das übermittelte Passwort für uns zu hashen, bevor wir es speichern. Zuletzt speichern wir den Benutzer in der Datenbank, indem wir die save()-Methode des $user-Objekts aufrufen.

Nachdem wir den neuen Benutzer erstellt haben, leiten wir den Benutzer mit der Methode Redirect::to() auf die Anmeldeseite um (wir erstellen die Anmeldeseite in wenigen Augenblicken). Dies nimmt nur den URI auf, zu dem Sie umleiten möchten. Wir verketten auch den Methodenaufruf with(), um dem Benutzer eine Flash-Nachricht zu geben, die ihn darüber informiert, dass seine Registrierung erfolgreich war.

Wenn die Validierung nicht bestanden wird, müssen wir die Registrierungsseite zusammen mit einigen Validierungsfehlermeldungen mit der alten Eingabe erneut anzeigen, damit der Benutzer seine Fehler korrigieren kann. Fügen Sie in Ihrer else-Anweisung den folgenden Code ein:

Hier leiten wir den Benutzer einfach zurück zur Registrierungsseite mit einer Flash-Nachricht, die ihn über aufgetretene Fehler informiert. Wir stellen sicher, dass die Validierungsfehlermeldungen angezeigt werden, indem wir die Methode withErrors($validator) aufrufen und ihr unser $validator-Objekt übergeben. Schließlich rufen wir die Methode withInput() auf, damit sich das Formular merkt, was der Benutzer ursprünglich eingegeben hat, und es dem Benutzer leicht macht, die Fehler zu korrigieren.

Hinzufügen des CSRF vor dem Filter

Jetzt müssen wir sicherstellen, dass unsere POST-Aktionen vor CSRF-Angriffen geschützt sind, indem wir den CSRF-Vorfilter in der Konstruktormethode unseres UsersController festlegen. Fügen Sie oben in Ihrem UsersController den folgenden Code ein:

In unserem Konstruktor rufen wir die Methode beforeFilter() auf und übergeben den String csrf als erstes Argument. csrf ist der Filter, den wir auf unsere Aktionen anwenden möchten. Dann übergeben wir ein Array als zweites Argument und weisen es an, diesen Filter nur auf POST-Anfragen anzuwenden. Auf diese Weise übergeben unsere Formulare bei jeder Übermittlung einen CSRF-Token. Dieser CSRF-Vorfilter stellt sicher, dass alle POST-Anfragen an unsere App dieses Token enthalten, und gibt uns die Gewissheit, dass keine POST-Anfragen von anderen externen Quellen an unsere Anwendung gesendet werden.


Erstellen der Anmeldeseite

Bevor Sie loslaufen und Ihre Registrierungsseite ausprobieren, müssen wir zuerst die Login-Seite erstellen, damit wir bei erfolgreicher Übermittlung unseres Registrierungsformulars keine Fehlermeldung erhalten. Denken Sie daran, dass wir den Benutzer speichern, wenn die Formularvalidierung erfolgreich ist, und ihn auf die Anmeldeseite umleiten. Derzeit haben wir diese Login-Seite jedoch nicht, also erstellen wir sie!

Erstellen Sie noch in Ihrem UsersController eine neue Aktion namens getLogin und fügen Sie den folgenden Code ein:

Dadurch wird eine users.login-Ansichtsdatei angezeigt. Wir müssen nun diese Ansichtsdatei erstellen. Erstellen Sie unter app/views/users eine neue Datei namens login.blade.php und fügen Sie den folgenden Code hinzu:

Dieser Code ist dem Code, den wir in unserer register-Ansicht verwendet haben, sehr ähnlich, daher werde ich die Erklärung dieses Mal auf die Unterschiede vereinfachen. Für dieses Formular haben wir es an einen users/signin-URI senden und die Klasse des Formulars in .form-signin geändert. Der h2 wurde geändert, um "Bitte einloggen" zu sagen und seine Klasse wurde auch in .form-signin-heading geändert. Als nächstes haben wir zwei Formularfelder, in die der Benutzer seine E-Mail-Adresse und sein Passwort eingeben kann, und schließlich unseren Senden-Button, der nur "Anmelden" sagt.

Lassen Sie uns einen neuen Benutzer registrieren!

Wir sind endlich an einem Punkt, an dem wir unser Anmeldeformular ausprobieren können. Natürlich funktioniert die Login-Funktionalität noch nicht, aber dazu kommen wir noch. Wir brauchten nur die Login-Seite, damit unsere Registrierungsseite richtig funktioniert. Stellen Sie sicher, dass Ihr Server noch läuft, wechseln Sie in Ihren Browser und besuchen Sie http://localhost:8000/users/register. Versuchen Sie, einige ungültige Benutzerdaten einzugeben, um die Fehlermeldungen bei der Formularvalidierung zu testen. So sieht meine Seite mit einem ungültigen Benutzer aus:

laravel-auth-displaying-errorslaravel-auth-displaying-errorslaravel-auth-displaying-errors

Versuchen Sie nun, sich mit gültigen Benutzerdaten zu registrieren. Diesmal werden wir zusammen mit unserer Erfolgsmeldung auf unsere Login-Seite weitergeleitet, ausgezeichnet!

laravel-auth-successful-registrationlaravel-auth-successful-registrationlaravel-auth-successful-registration

Einloggen

Wir haben also erfolgreich einen neuen Benutzer registriert und haben eine Login-Seite, aber wir können uns immer noch nicht einloggen. Wir müssen nun die postSignin-Aktion für unsere users/signin-URI erstellen, an die unser Anmeldeformular übermittelt wird. Gehen wir zurück zu unserem UsersController und erstellen eine neue Aktion namens postSignin:

Lassen Sie uns nun den Benutzer mit den übermittelten Daten aus dem Login-Formular einloggen. Fügen Sie Ihrer postSignin()-Aktion den folgenden Code hinzu:

Hier versuchen wir, den Benutzer mit der Methode Auth::attempt() anzumelden. Wir übergeben einfach ein Array, das die E-Mail-Adresse und das Passwort des Benutzers enthält, die er über das Anmeldeformular übermittelt hat. Diese Methode gibt entweder true oder false zurück, wenn die Anmeldeinformationen des Benutzers validiert werden. Wir können diese Methode attempt() also innerhalb einer if-Anweisung verwenden. Wenn der Benutzer angemeldet war, leiten wir ihn einfach auf eine dashboard-Ansichtsseite um und geben ihm eine Erfolgsmeldung. Andernfalls wurden die Anmeldeinformationen des Benutzers nicht validiert und in diesem Fall leiten wir ihn mit einer Fehlermeldung zurück zur Anmeldeseite und zeigen die alte Eingabe an, damit der Benutzer es erneut versuchen kann.

Erstellen des Dashboards

Bevor Sie nun versuchen, sich mit Ihrem neu registrierten Benutzer anzumelden, müssen wir diese Dashboard-Seite erstellen und sie vor nicht autorisierten, nicht angemeldeten Benutzern schützen. Die Dashboard-Seite sollte nur für diejenigen Benutzer zugänglich sein, die sich bei unserer Anwendung registriert und angemeldet haben. Andernfalls, wenn ein nicht autorisierter Benutzer versucht, das Dashboard zu besuchen, leiten wir ihn um und bitten ihn, sich zuerst anzumelden.

Während wir uns noch in Ihrem UsersController befinden, erstellen wir eine neue Aktion namens getDashboard:

Und innerhalb dieser Aktion zeigen wir einfach eine users.dashboard-Ansichtsdatei an:

Als nächstes müssen wir es vor nicht autorisierten Benutzern schützen, indem wir den auth-Vor-Filter verwenden. Fügen Sie im Konstruktor unseres UsersController den folgenden Code ein:

Dies verwendet den auth-Filter, der überprüft, ob der aktuelle Benutzer angemeldet ist. Wenn der Benutzer nicht angemeldet ist, wird er auf die Anmeldeseite umgeleitet, wodurch der Benutzerzugriff im Wesentlichen verweigert wird. Beachten Sie, dass ich auch ein Array als zweites Argument übergebe. Durch Festlegen des only-Schlüssels kann ich diesem vor dem Filter mitteilen, dass er nur auf die bereitgestellten Aktionen angewendet wird. In diesem Fall möchte ich nur die getDashboard-Aktion schützen.

Anpassen von Filtern

Standardmäßig leitet der auth-Filter Benutzer zu einem /login-URI um, dies funktioniert jedoch nicht für unsere Anwendung. Wir müssen diesen Filter so ändern, dass er stattdessen zu einem users/login-URI umleitet, andernfalls erhalten Sie einen Fehler. Öffnen Sie app/filters.php und ändern Sie im Abschnitt Authentifizierungsfilter den auth-Filter, um auf users/login umzuleiten, wie folgt:

Erstellen der Dashboard-Ansicht

Bevor wir Benutzer bei unserer Anwendung anmelden können, müssen wir diese dashboard-Ansichtsdatei erstellen. Erstellen Sie unter app/views/users eine neue Datei namens dashboard.blade.php und fügen Sie den folgenden Code-Schnipsel ein:

Hier zeige ich einen sehr einfachen Absatz an, um dem Benutzer mitzuteilen, dass er sich jetzt in seinem Dashboard befindet.

Lassen Sie uns einloggen!

Jetzt sollten wir uns einloggen können. Navigieren Sie zu http://localhost:8000/users/login, geben Sie die Anmeldeinformationen Ihres Benutzers ein und probieren Sie es aus.

laravel-auth-logged-inlaravel-auth-logged-inlaravel-auth-logged-in

Erfolg!


Anzeigen der entsprechenden Navigationslinks

Ok, wir können uns jetzt registrieren und in unsere Anwendung einloggen, sehr cool! Aber wir haben hier eine kleine Macke, wenn Sie sich unser Navigationsmenü ansehen, obwohl wir eingeloggt sind, können Sie sehen, dass die Schaltflächen zum Registrieren und Anmelden noch sichtbar sind. Idealerweise sollen diese nur angezeigt werden, wenn der Benutzer nicht angemeldet ist. Sobald sich der Benutzer jedoch anmeldet, möchten wir einen Abmeldelink anzeigen. Um diese Änderung vorzunehmen, öffnen wir unsere Datei main.blade.php erneut. So sieht unser Navbar-Code derzeit aus:

Lassen Sie uns dies leicht ändern und unseren ursprünglichen Navbar-Code durch Folgendes ersetzen:

Alles, was ich getan habe, ist, unsere li-Tags für unsere Navbar in eine if-Anweisung einzuschließen, um mit der Methode !Auth::check() zu überprüfen, ob der Benutzer nicht eingeloggt ist. Diese Methode gibt true zurück, wenn der Benutzer angemeldet ist, andernfalls false. Wenn der Benutzer also nicht eingeloggt ist, zeigen wir die Registrierungs- und Login-Links an, andernfalls ist der Benutzer eingeloggt und wir zeigen stattdessen einen Logout-Link an.

laravel-auth-logout-linklaravel-auth-logout-linklaravel-auth-logout-link

Ausloggen

Da unsere Navigationsleiste nun die entsprechenden Links anzeigt, basierend auf dem angemeldeten Status des Benutzers, schließen wir diese Anwendung ab, indem wir die getLogout-Aktion erstellen, um den Benutzer tatsächlich abzumelden. Erstellen Sie in Ihrem UsersController eine neue Aktion namens getLogout:

Fügen Sie nun den folgenden Codeausschnitt hinzu, um den Benutzer abzumelden:

Hier rufen wir die Methode Auth::logout() auf, die das Abmelden des Benutzers für uns übernimmt. Anschließend leiten wir den Benutzer zurück auf die Login-Seite und geben ihm eine Flash-Nachricht, die ihn darüber informiert, dass er abgemeldet wurde.

laravel-auth-logged-outlaravel-auth-logged-outlaravel-auth-logged-out

Abschluss

Und damit ist dieses Tutorial zur Laravel 4-Authentifizierung abgeschlossen. Ich hoffe, Sie fanden dies hilfreich beim Einrichten der Authentifizierung für Ihre Laravel-Apps. Wenn Sie irgendwelche Probleme oder Fragen haben, können Sie diese gerne in den Kommentaren stellen und ich werde mein Bestes geben, um Ihnen zu helfen. Sie können sich den vollständigen Quellcode für die kleine Demo-App ansehen, die wir in diesem Tutorial auf Github erstellt haben. Danke fürs Lesen.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.