Manually Authenticating Users
Beachten Sie, dass Sie nicht verpflichtet sind, die mit Laravel mitgelieferten Authentifizierungs-Controller zu verwenden. Wenn Sie sich entscheiden, diese Controller zu entfernen, müssen Sie die Benutzerauthentifizierung direkt mit den Laravel-Authentifizierungsklassen verwalten. Keine Sorge, es ist ein Kinderspiel!
Wir werden auf die Authentifizierungsdienste von Laravel über die Auth-Fassade zugreifen, also müssen wir sicherstellen, dass die Auth-Fassade an der Spitze der Klasse importiert wird. Als nächstes sehen wir uns die attempt-Methode an:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
/**
* Handle an authentication attempt.
*
* @param \Illuminate\Http\Request $request
*
* @return Response
*/
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
}
Die attempt-Methode akzeptiert ein Array von Schlüssel/Wert-Paaren als erstes Argument. Die Werte in dem Array werden verwendet, um den Benutzer in Ihrer Datenbanktabelle zu finden. Im obigen Beispiel wird der Benutzer also über den Wert der Spalte email ermittelt. Wenn der Benutzer gefunden wird, wird das in der Datenbank gespeicherte gehashte Passwort mit dem Passwortwert, der der Methode über das Array übergeben wurde, verglichen. Das als Passwortwert angegebene Passwort sollte nicht gehasht werden, da das Framework den Wert automatisch hasht, bevor er mit dem gehashten Passwort in der Datenbank verglichen wird. Wenn die beiden gehashten Passwörter übereinstimmen, wird eine authentifizierte Sitzung für den Benutzer gestartet.
Die attempt-Methode gibt bei erfolgreicher Authentifizierung true zurück. Andernfalls wird false zurückgegeben.
Die intended-Methode auf dem Redirector leitet den Benutzer zu der URL um, auf die er versucht hat zuzugreifen, bevor er von der Authentifizierungs-Middleware abgefangen wird. Dieser Methode kann eine Fallback-URI gegeben werden, falls das beabsichtigte Ziel nicht verfügbar ist.
Angeben zusätzlicher Bedingungen
Wenn Sie möchten, können Sie zusätzlich zur E-Mail und zum Passwort des Benutzers weitere Bedingungen in die Authentifizierungsabfrage aufnehmen. Zum Beispiel können wir überprüfen, ob der Benutzer als "aktiv" markiert ist:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
In diesen Beispielen ist email keine erforderliche Option, sondern wird lediglich als Beispiel verwendet. Sie sollten den Spaltennamen verwenden, der einem "Benutzernamen" in Ihrer Datenbank entspricht.
Accessing Specific Guard Instances
Welche guard-Instanz Sie verwenden möchten, können Sie mit der guard-Methode auf der Auth-Fassade festlegen. Damit können Sie die Authentifizierung für einzelne Teile Ihrer Anwendung über völlig getrennte authentifizierbare Modelle oder Benutzertabellen verwalten.
Der Name des Guard, der der Guard-Methode übergeben wird, sollte einem der in Ihrer Konfigurationsdatei auth.php konfigurierten Guards entsprechen:
if (Auth::guard('admin')->attempt($credentials)) {
//
}
Logging Out
Um Benutzer aus Ihrer Anwendung abzumelden, können Sie die Logout-Methode auf der Auth-Fassade verwenden. Dadurch werden die Authentifizierungsinformationen in der Sitzung des Benutzers gelöscht:
Auth::logout();
Remembering Users
Wenn Sie in Ihrer Anwendung die "Merken Sie sich mich"-Funktionalität bereitstellen möchten, können Sie der attempt-Methode einen booleschen Wert als zweites Argument übergeben, der den Benutzer auf unbestimmte Zeit oder bis zur manuellen Abmeldung authentifiziert hält. Ihre Benutzertabelle muss die Spalte remember_token enthalten, in der das Token "remember me" gespeichert wird.
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// The user is being remembered...
}
Wenn Sie den eingebauten LoginController verwenden, der mit Laravel ausgeliefert wird, ist die richtige Logik, um sich an die Benutzer zu "erinnern", bereits durch die vom Controller verwendeten Eigenschaften implementiert.
Wenn Sie sich an Benutzer "erinnern", können Sie die viaRemember-Methode verwenden, um festzustellen, ob der Benutzer mit dem "remember me"-Cookie authentifiziert wurde:
if (Auth::viaRemember()) {
//
}
Other Authentication Methods
Authenticate A User Instance
Wenn Sie eine bestehende Benutzerinstanz in Ihrer Anwendung anmelden müssen, können Sie die login-Methode mit der Benutzerinstanz aufrufen. Das angegebene Objekt muss eine Implementierung des Illuminate\Contracts\Auth\Authenticable contract sein. Das in Laravel enthaltene App\User Model implementiert diese Schnittstelle bereits:
Auth::login($user);
// Login and "remember" the given user...
Auth::login($user, true);
Sie können die Guard-Instance angeben, die Sie verwenden möchten:
Auth::guard('admin')->login($user);
Authenticate A User By ID
Um einen Benutzer mit seiner ID in die Anwendung einzuloggen, können Sie die Methode loginUsingId verwenden. Diese Methode akzeptiert den Primärschlüssel des Benutzers, den Sie authentifizieren möchten:
Auth::loginUsingId(1);
// Login and "remember" the given user...
Auth::loginUsingId(1, true);
Authenticate A User Once
Sie können die Methode "once" verwenden, um einen Benutzer für eine einzelne Anfrage in die Anwendung einzuloggen. Es werden keine Sessions oder Cookies verwendet, was bedeutet, dass diese Methode beim Aufbau einer zustandslosen API hilfreich sein kann:
if (Auth::once($credentials)) {
//
}