Heim > Artikel > Backend-Entwicklung > PHP-Beispiele für Laravel-Authentifizierungsprinzipien und detaillierte Erläuterung der vollständig angepassten Authentifizierung
Ich habe das Laravel-Framework kürzlich kennengelernt, daher stellt Ihnen der folgende Artikel hauptsächlich die relevanten Informationen zu den Laravel-Authentifizierungsprinzipien und der vollständig angepassten Authentifizierung vor. Freunde, die es benötigen, können darauf zurückgreifen . Das Folgende ist: Lass uns gemeinsam mit dem Herausgeber lernen
Vorwort
Die Standardauthentifizierungsfunktion von Laravel ist bereits sehr umfassend, aber wir stoßen oft darauf Einige Situationen müssen angepasst werden, z. B. stimmen die Verifizierungsfelder nicht mit den Standardfeldern überein, z. B. die Notwendigkeit, Benutzernamen und E-Mail-Authentifizierung gleichzeitig zu erfüllen usw. Wie erstelle ich ein vollständig benutzerdefiniertes Zertifikat? Anstelle eines Tutorials stelle ich lieber das Funktionsprinzip vor, damit Sie es einfacher selbst ändern oder anpassen können.
Authenticatable-Schnittstelle
IlluminateContractsAuthAuthenticatable
Authenticatable definiert eine Schnittstelle, die von einem Modell oder einer Klasse implementiert werden muss, die implementiert werden kann Wird zur Authentifizierung verwendet. Das heißt, wenn Sie eine benutzerdefinierte Klasse zur Authentifizierung verwenden müssen, müssen Sie die von dieser Schnittstelle definierten Methoden implementieren.
// 获取唯一标识的,可以用来认证的字段名,比如 id,uuid public function getAuthIdentifierName(); // 获取该标示符对应的值 public function getAuthIdentifier(); // 获取认证的密码 public function getAuthPassword(); // 获取remember token public function getRememberToken(); // 设置 remember token public function setRememberToken($value); // 获取 remember token 对应的字段名,比如默认的 'remember_token' public function getRememberTokenName();
Zum Beispiel muss Ihr Authentifizierungsmodell „Token“ anstelle von „Passwort“ als Passwortüberprüfung verwenden. Zu diesem Zeitpunkt können Sie die Rückgabe von ändern die getAuthPassword()-Methode. Der Wert ist „token“. Auch das standardmäßige Benutzermodell von Laravel Auth verwendet das Merkmal. Dieses Merkmal definiert die Standardauthentifizierungskennung des Benutzermodells als „id“, das Kennwortfeld als „password“, das Feld, das dem Erinnerungstoken entspricht, als „remember_token“ und so weiter.
Einige Einstellungen können durch Überschreiben dieser Methoden des Benutzermodells geändert werden.
IlluminateContractsAuthGuardGuard-Schnittstelle definiert ein Modell oder eine Klasse, die authentifizierungsfähige (authentifizierbare) Authentifizierungsmethoden und einige implementiert häufig verwendete Schnittstellen.
Guard-Schnittstelle
// 判断当前用户是否登录
public function check();
// 判断当前用户是否是游客(未登录)
public function guest();
// 获取当前认证的用户
public function user();
// 获取当前认证用户的 id,严格来说不一定是 id,应该是上个模型中定义的唯一的字段名
public function id();
// 根据提供的消息认证用户
public function validate(array $credentials = []);
// 设置当前用户
public function setUser(Authenticatable $user);
// 尝试根据提供的凭证验证用户是否合法 public function attempt(array $credentials = [], $remember = false); // 一次性登录,不记录session or cookie public function once(array $credentials = []); // 登录用户,通常在验证成功后记录 session 和 cookie public function login(Authenticatable $user, $remember = false); // 使用用户 id 登录 public function loginUsingId($id, $remember = false); // 使用用户 ID 登录,但是不记录 session 和 cookie public function onceUsingId($id); // 通过 cookie 中的 remember token 自动登录 public function viaRemember(); // 登出 public function logout();Laravel bietet standardmäßig drei mittlere Guards: RequestGuard , TokenGuard, SessionGuard.
RequestGuard
IlluminateAuthRequestGuardRequestGuard ist ein sehr einfacher Schutz, der in einem Abschluss übergeben wird. Wird zertifiziert geliefert. Sie können einen benutzerdefinierten RequestGuard hinzufügen, indem Sie Auth::viaRequest aufrufen.SessionGuard
IlluminateAuthSessionGuardSessionGuard ist der Standardschutz für die Laravel-Webauthentifizierung.TokenGuard
IlluminateAuthTokenGuardTokenGuard eignet sich für die zustandslose API-Authentifizierung durch Token-Authentifizierung.UserProvider Interface
IlluminateContractsAuthUserProviderDie UserProvider-Schnittstelle definiert die Methode zum Abrufen des Authentifizierungsmodells, z. B. Abrufen des Modells basierend auf der ID, Abrufen des Modells basierend auf E-Mail usw.// 通过唯一标示符获取认证模型
public function retrieveById($identifier);
// 通过唯一标示符和 remember token 获取模型
public function retrieveByToken($identifier, $token);
// 通过给定的认证模型更新 remember token
public function updateRememberToken(Authenticatable $user, $token);
// 通过给定的凭证获取用户,比如 email 或用户名等等
public function retrieveByCredentials(array $credentials);
// 认证给定的用户和给定的凭证是否符合
public function validateCredentials(Authenticatable $user, array $credentials);
DatabaseUserProvider
IlluminateAuthDatabaseUserProviderErhalten Sie das Authentifizierungsmodell direkt über die Datenbanktabelle.EloquentUserProvider
IlluminateAuthEloquentUserProviderErhalten Sie das Authentifizierungsmodell über eloquent modelAuthManager
IlluminateAuthAuthManagerGuard wird verwendet, um zu authentifizieren, ob ein Benutzer erfolgreich authentifiziert wurde, UserProvider wird verwendet, um die Quelle des Authentifizierungsmodells bereitzustellen und verwaltet den Schutz und den benutzerdefinierten Schutz gemäß der Konfiguration des Projekts. Weitere Funktionen werden über AuthManager implementiert. AuthManager sollte ein bisschen wie die Context-Klasse im Strategiemuster und die Factory in der Factory-Methode sein. Einerseits verwaltet er den Guard und andererseits ruft er die spezifische Strategie (Guard) auf )-Methode durch die magische Methode __call.Die entsprechende Implementierungsklasse der Auth-Fassade ist AuthManager. AuthManager wird als Singleton im Container registriert und wird zur Verwaltung aller Guard-, Benutzeranbieter- und Guard-Proxy-Arbeiten verwendet.
Benutzerdefinierte Authentifizierung Anhand der oben genannten Kenntnisse können Sie erkennen, dass es sehr einfach ist, eine Authentifizierung anzupassen.Authentifizierungsmodell erstellen
Erstellen Sie ein benutzerdefiniertes Authentifizierungsmodell und implementieren Sie die Authenticatable-Schnittstelle; Erstellen Sie einen benutzerdefinierten UserProvider添加 guard creator 和 user provider creator 到 AuthManager 中
在 AppServiceProvider 的 boot 方法添加如下代码:
Auth::extend('myguard', function(){ ... return new MyGuard(); //返回自定义 guard 实例 ... }); Auth::provider('myuserprovider', function(){ return new MyUserProvider(); // 返回自定义的 user provider });
在 config\auth.php的 guards 数组中添加自定义 guard,一个自定义 guard 包括两部分: driver 和 provider.
'oustn' => [ 'driver' => 'myguard', 'provider' => 'myusers', ],
在 config\auth.php的 providers 数组中添加自定义 user provider.
'myusers' => [ 'driver' => 'myuserprovider' // 里面具体的字段可以根据你创建 user provider 需要的信息自由添加,可以通过 Auth::createUserProvider('myuserprovider') 创建 ],
设置 config\auth.php 的 defaults.guard 为 oustn.
Das obige ist der detaillierte Inhalt vonPHP-Beispiele für Laravel-Authentifizierungsprinzipien und detaillierte Erläuterung der vollständig angepassten Authentifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!