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
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 Dateiconfig/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: