Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Beispiele für Laravel-Authentifizierungsprinzipien und detaillierte Erläuterung der vollständig angepassten Authentifizierung

PHP-Beispiele für Laravel-Authentifizierungsprinzipien und detaillierte Erläuterung der vollständig angepassten Authentifizierung

无忌哥哥
无忌哥哥Original
2018-07-12 14:28:112418Durchsuche

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.


Guard-Schnittstelle

IlluminateContractsAuthGuard

Guard-Schnittstelle definiert ein Modell oder eine Klasse, die authentifizierungsfähige (authentifizierbare) Authentifizierungsmethoden und einige implementiert häufig verwendete Schnittstellen.

// 判断当前用户是否登录
public function check();
// 判断当前用户是否是游客(未登录)
public function guest();
// 获取当前认证的用户
public function user();
// 获取当前认证用户的 id,严格来说不一定是 id,应该是上个模型中定义的唯一的字段名
public function id();
// 根据提供的消息认证用户
public function validate(array $credentials = []);
// 设置当前用户
public function setUser(Authenticatable $user);

StatefulGuard-Schnittstelle

IlluminateContractsAuthStatefulGuard

Die StatefulGuard-Schnittstelle erbt von der Guard-Schnittstelle, mit Ausnahme einiger in Guard definierter grundlegender Schnittstellen. und fügte außerdem einen weiteren, zustandsbehafteten Guard hinzu.

Zu den neu hinzugefügten Schnittstellen gehören diese:

// 尝试根据提供的凭证验证用户是否合法
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

IlluminateAuthRequestGuard

RequestGuard 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

IlluminateAuthSessionGuard

SessionGuard ist der Standardschutz für die Laravel-Webauthentifizierung.

TokenGuard

IlluminateAuthTokenGuard

TokenGuard eignet sich für die zustandslose API-Authentifizierung durch Token-Authentifizierung.

UserProvider Interface

IlluminateContractsAuthUserProvider

Die 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);

In Laravel gibt es standardmäßig zwei Benutzeranbieter: DatabaseUserProvider und EloquentUserProvider.

DatabaseUserProvider

IlluminateAuthDatabaseUserProvider

Erhalten Sie das Authentifizierungsmodell direkt über die Datenbanktabelle.

EloquentUserProvider

IlluminateAuthEloquentUserProvider

Erhalten Sie das Authentifizierungsmodell über eloquent model

AuthManager

IlluminateAuthAuthManager

Guard 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

  • Erstellen Sie einen benutzerdefinierten UserProvider, implementieren Sie die UserProvider-Schnittstelle und geben Sie das oben genannte benutzerdefinierte Authentifizierungsmodell zurück.

Erstellen Sie einen benutzerdefinierten Guard

  • Erstellen Sie einen benutzerdefinierten Guard und implementieren Sie die Guard- oder StatefulGuard-Schnittstelle

    • 添加 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn