Authentifizierung

WARNUNG Sie durchsuchen die Dokumentation für eine alte Version von Laravel. Erwägen Sie, Ihr Projekt auf Laravel 8 zu aktualisieren.x.

  • Einführung
  • Benutzer authentifizieren
  • Den authentifizierten Benutzer abrufen
  • Routen schützen
  • HTTP-Basisauthentifizierung
  • Kennworterinnerungen & Zurücksetzen
  • Soziale Authentifizierung

Einführung

Laravel macht die Implementierung der Authentifizierung sehr einfach. Tatsächlich ist fast alles sofort für Sie konfiguriert. Die Authentifizierungskonfigurationsdatei befindet sich unter config/auth.php und enthält mehrere gut dokumentierte Optionen zum Optimieren des Verhaltens der Authentifizierungsdienste.

Standardmäßig enthält Laravel ein App\User -Modell in Ihrem app -Verzeichnis. Dieses Modell kann mit dem standardmäßigen Eloquent-Authentifizierungstreiber verwendet werden.

Denken Sie daran: Beim Erstellen des Datenbankschemas für dieses Modell muss die Spalte Kennwort mindestens 60 Zeichen lang sein. Bevor Sie beginnen, stellen Sie außerdem sicher, dass Ihre users -Tabelle (oder eine gleichwertige Tabelle) eine nullfähige Zeichenfolge remember_token mit 100 Zeichen enthält. In dieser Spalte wird ein Token für „Remember Me“ -Sitzungen gespeichert, die von Ihrer Anwendung verwaltet werden. Dies kann durch Verwendung von $table->rememberToken(); in einer Migration erfolgen. Natürlich liefert Laravel 5 Migrationen für diese Spalten sofort aus!

Wenn Ihre Anwendung Eloquent nicht verwendet, können Sie den Authentifizierungstreiber database verwenden, der den Laravel Query Builder verwendet.

Benutzer authentifizieren

Laravel wird standardmäßig mit zwei authentifizierungsbezogenen Controllern ausgeliefert. Der AuthController übernimmt die Registrierung neuer Benutzer und das „Anmelden“, während der PasswordController die Logik enthält, mit der vorhandene Benutzer ihre vergessenen Kennwörter zurücksetzen können.

Jeder dieser Controller verwendet ein Merkmal, um die erforderlichen Methoden einzuschließen. Für viele Anwendungen müssen Sie diese Controller überhaupt nicht ändern. Die Ansichten, die diese Controller rendern, befinden sich im Verzeichnis resources/views/auth. Sie können diese Ansichten nach Belieben anpassen.

Der Benutzerregistrar

Um die Formularfelder zu ändern, die erforderlich sind, wenn sich ein neuer Benutzer bei Ihrer Anwendung registriert, können Sie die Klasse App\Services\Registrar ändern. Diese Klasse ist für die Validierung und Erstellung neuer Benutzer Ihrer Anwendung verantwortlich.

Die validator -Methode von Registrar enthält die Validierungsregeln für neue Benutzer der Anwendung, während die create -Methode von Registrar für die Erstellung neuer User -Datensätze in Ihrer Datenbank verantwortlich ist. Es steht Ihnen frei, jede dieser Methoden nach Ihren Wünschen zu ändern. Das Registrar wird vom AuthController über die im AuthenticatesAndRegistersUsers -Merkmal enthaltenen Methoden aufgerufen.

Manuelle Authentifizierung

Wenn Sie die bereitgestellte AuthController Implementierung nicht verwenden möchten, müssen Sie die Authentifizierung Ihrer Benutzer mithilfe der Laravel-Authentifizierungsklassen direkt verwalten. Keine Sorge, es ist immer noch ein Kinderspiel! Schauen wir uns zuerst die attempt -Methode an:

Die attempt -Methode akzeptiert ein Array von Schlüssel / Wert-Paaren als erstes Argument. Der password -Wert wird gehasht. Die anderen Werte im Array werden verwendet, um den Benutzer in Ihrer Datenbanktabelle zu finden. Im obigen Beispiel wird der Benutzer also anhand des Werts der Spalte email abgerufen. Wenn der Benutzer gefunden wird, wird das in der Datenbank gespeicherte Hash-Passwort mit dem Hash-Wert password verglichen, der über das Array an die Methode übergeben wird. Wenn die beiden Hash-Kennwörter übereinstimmen, wird eine neue authentifizierte Sitzung für den Benutzer gestartet.

Die Methode attempt gibt true zurück, wenn die Authentifizierung erfolgreich war. Andernfalls wird false zurückgegeben.

Hinweis: In diesem Beispiel ist email keine erforderliche Option, sondern wird lediglich als Beispiel verwendet. Sie sollten den Spaltennamen verwenden, der einem „Benutzernamen“ in Ihrer Datenbank entspricht.

Die Umleitungsfunktion intended leitet den Benutzer zu der URL um, auf die er zugreifen wollte, bevor er vom Authentifizierungsfilter abgefangen wurde. Ein Fallback-URI kann für diese Methode angegeben werden, falls das beabsichtigte Ziel nicht verfügbar ist.

Benutzer mit Bedingungen authentifizieren

Sie können der Authentifizierungsabfrage auch zusätzliche Bedingungen hinzufügen:

if (Auth::attempt()){ // The user is active, not suspended, and exists.}

Ermitteln, ob ein Benutzer authentifiziert ist

Um festzustellen, ob der Benutzer bereits in Ihrer Anwendung angemeldet ist, können Sie die Methode check verwenden:

if (Auth::check()){ // The user is logged in...}

Einen Benutzer authentifizieren und sich an ihn „erinnern“

Wenn Sie die „Remember me“ -Funktionalität in Ihrer Anwendung bereitstellen möchten, können Sie einen booleschen Wert als zweites Argument an die attempt -Methode übergeben, wodurch der Benutzer auf unbestimmte Zeit authentifiziert bleibt oder bis er sich manuell abmeldet. Natürlich muss Ihre users -Tabelle die Zeichenfolge remember_token -Spalte enthalten, in der das Token „Remember me“ gespeichert wird.

if (Auth::attempt(, $remember)){ // The user is being remembered...}

Wenn Sie sich an Benutzer „erinnern“, können Sie die viaRemember -Methode verwenden, um festzustellen, ob der Benutzer mithilfe des Cookies „Remember me“ authentifiziert wurde:

if (Auth::viaRemember()){ //}

Authentifizierung von Benutzern anhand der ID

Verwenden Sie die Methode loginUsingId, um einen Benutzer anhand seiner ID bei der Anwendung anzumelden:

Auth::loginUsingId(1);

Validieren von Benutzeranmeldeinformationen ohne Anmeldung

Mit der validate -Methode können Sie die Anmeldeinformationen eines Benutzers validieren, ohne sie tatsächlich in der Anwendung anzumelden:

if (Auth::validate($credentials)){ //}

Benutzer für eine einzelne Anforderung anmelden

Sie können auch die Methode once verwenden, um einen Benutzer für eine einzelne Anforderung in der Anwendung anzumelden. Es werden keine Sitzungen oder Cookies verwendet:

if (Auth::once($credentials)){ //}

Manuelles Anmelden eines Benutzers

Wenn Sie eine vorhandene Benutzerinstanz in Ihrer Anwendung anmelden müssen, können Sie die Methode login mit der Benutzerinstanz aufrufen:

Auth::login($user);

Dies entspricht der Anmeldung eines Benutzers über Anmeldeinformationen mit der Methode attempt.

Abmelden eines Benutzers aus der Anwendung

Auth::logout();

Wenn Sie die integrierten Laravel-Authentifizierungscontroller verwenden, wird standardmäßig eine Controller-Methode bereitgestellt, mit der Benutzer aus der Anwendung abgemeldet werden.

Authentifizierungsereignisse

Wenn die Methode attempt aufgerufen wird, wird das Ereignis auth.attempt ausgelöst. Wenn der Authentifizierungsversuch erfolgreich ist und der Benutzer angemeldet ist, wird auch das Ereignis auth.login ausgelöst.

Abrufen des authentifizierten Benutzers

Sobald ein Benutzer authentifiziert ist, gibt es mehrere Möglichkeiten, eine Instanz des Benutzers abzurufen.

Erstens können Sie über die Auth -Fassade auf den Benutzer zugreifen:

Zweitens können Sie über eine Illuminate\Http\Request -Instanz auf den authentifizierten Benutzer zugreifen:

Drittens können Sie den Illuminate\Contracts\Auth\Authenticatable -Vertrag eingeben. Dieser Typhinweis kann einem Controller-Konstruktor, einer Controller-Methode oder einem anderen Konstruktor einer vom Dienstcontainer aufgelösten Klasse hinzugefügt werden:

Routen schützen

Routen-Middleware kann verwendet werden, um nur authentifizierten Benutzern den Zugriff auf eine bestimmte Route zu ermöglichen. Laravel stellt standardmäßig die Middleware auth bereit und ist in app\Http\Middleware\Authenticate.php definiert. Sie müssen es lediglich an eine Routendefinition anhängen:

HTTP-Basisauthentifizierung

Die HTTP-Basisauthentifizierung bietet eine schnelle Möglichkeit, Benutzer Ihrer Anwendung zu authentifizieren, ohne eine dedizierte „Anmeldeseite“ einzurichten. Hängen Sie zunächst die Middleware auth.basic an Ihre Route an:

Schützen einer Route mit HTTP Basic

Route::get('profile', );

Standardmäßig verwendet die Middleware basic die Spalte email im Benutzerdatensatz als „Benutzername“.

Statuslosen HTTP-Basisfilter einrichten

Sie können die HTTP-Basisauthentifizierung auch verwenden, ohne einen Benutzerkennungscookie in der Sitzung zu setzen, was besonders für die API-Authentifizierung nützlich ist. Definieren Sie dazu eine Middleware, die die Methode onceBasic aufruft:

public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}

Wenn Sie PHP FastCGI verwenden, funktioniert die HTTP-Basisauthentifizierung möglicherweise nicht ordnungsgemäß. Die folgenden Zeilen sollten Ihrer .htaccess -Datei hinzugefügt werden:

RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* - 

Kennworterinnerungen & Zurücksetzen

Modell & Tabelle

Die meisten Webanwendungen bieten Benutzern die Möglichkeit, ihre vergessenen Kennwörter zurückzusetzen. Anstatt Sie zu zwingen, dies für jede Anwendung erneut zu implementieren, bietet Laravel praktische Methoden zum Senden von Kennworterinnerungen und zum Zurücksetzen von Kennwörtern.

Stellen Sie zunächst sicher, dass Ihr User -Modell den Illuminate\Contracts\Auth\CanResetPassword -Vertrag implementiert. Natürlich implementiert das im Framework enthaltene Modell User diese Schnittstelle bereits und verwendet das Merkmal Illuminate\Auth\Passwords\CanResetPassword, um die zum Implementieren der Schnittstelle erforderlichen Methoden einzuschließen.

Generieren der Erinnerungstabelle Migration

Als nächstes muss eine Tabelle zum Speichern der Token zum Zurücksetzen des Kennworts erstellt werden. Die Migration für diese Tabelle ist standardmäßig in Laravel enthalten und befindet sich im Verzeichnis database/migrations. Alles, was Sie tun müssen, ist zu migrieren:

php artisan migrate

Kennworterinnerungscontroller

Laravel enthält auch einen Auth\PasswordController , der die zum Zurücksetzen von Benutzerkennwörtern erforderliche Logik enthält. Wir haben sogar Ansichten bereitgestellt, um Ihnen den Einstieg zu erleichtern! Die Ansichten befinden sich im Verzeichnis resources/views/auth. Sie können diese Ansichten nach Belieben an das Design Ihrer eigenen Anwendung anpassen.

Ihr Benutzer erhält eine E-Mail mit einem Link, der auf die getReset -Methode des PasswordController verweist. Diese Methode rendert das Formular zum Zurücksetzen des Kennworts und ermöglicht es Benutzern, ihre Kennwörter zurückzusetzen. Nach dem Zurücksetzen des Kennworts wird der Benutzer automatisch bei der Anwendung angemeldet und zu /home weitergeleitet. Sie können den Speicherort der Umleitung nach dem Zurücksetzen anpassen, indem Sie eine redirectTo-Eigenschaft für PasswordController definieren:

protected $redirectTo = '/dashboard';

Hinweis: Standardmäßig verfallen Token zum Zurücksetzen des Kennworts nach einer Stunde. Sie können dies über die Option reminder.expire in Ihrer Datei config/auth.php ändern.

Soziale Authentifizierung

Zusätzlich zur typischen formularbasierten Authentifizierung bietet Laravel auch eine einfache und bequeme Möglichkeit, sich mit OAuth-Anbietern mithilfe von Laravel Socialite zu authentifizieren. Socialite unterstützt derzeit die Authentifizierung mit Facebook, Twitter, Google, GitHub und Bitbucket.

Um mit Socialite zu beginnen, fügen Sie das Paket in Ihre composer.json -Datei ein:

"laravel/socialite": "~2.0"

Registrieren Sie als Nächstes die Laravel\Socialite\SocialiteServiceProvider in Ihrer config/app.php -Konfigurationsdatei. Sie können auch eine Fassade registrieren:

'Socialize' => 'Laravel\Socialite\Facades\Socialite',

Sie müssen Anmeldeinformationen für die von Ihrer Anwendung verwendeten OAuth-Dienste hinzufügen. Diese Anmeldeinformationen sollten in Ihrer config/services.php -Konfigurationsdatei abgelegt werden und den Schlüssel verwenden facebook, twitter, google, oder github, abhängig von den Anbietern, die Ihre Anwendung benötigt. Zum Beispiel:

'github' => ,

Als nächstes sind Sie bereit, Benutzer zu authentifizieren! Sie benötigen zwei Routen: eine zum Umleiten des Benutzers an den OAuth-Anbieter und eine andere zum Empfangen des Rückrufs vom Anbieter nach der Authentifizierung. Hier ist ein Beispiel mit der Socialize -Fassade:

Die redirect -Methode sendet den Benutzer an den OAuth-Anbieter, während die user -Methode die eingehende Anforderung liest und die Benutzerinformationen vom Anbieter abruft. Bevor Sie den Benutzer umleiten, können Sie auch „Bereiche“ für die Anforderung festlegen:

return Socialize::with('github')->scopes()->redirect();

Sobald Sie eine Benutzerinstanz haben, können Sie einige weitere Details zum Benutzer abrufen:

Abrufen von Benutzerdetails