Heim Backend-Entwicklung PHP-Tutorial 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

Jul 12, 2018 pm 02:28 PM
laravel

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();
Nach dem Login kopieren

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);
Nach dem Login kopieren

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();
Nach dem Login kopieren

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);
Nach dem Login kopieren

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
    });
    Nach dem Login kopieren

    在 config\auth.php的 guards 数组中添加自定义 guard,一个自定义 guard 包括两部分: driver 和 provider.

    'oustn' => [
     'driver' => 'myguard',
     'provider' => 'myusers',
    ],
    Nach dem Login kopieren

    在 config\auth.php的 providers 数组中添加自定义 user provider.

    'myusers' => [
     'driver' => 'myuserprovider' // 里面具体的字段可以根据你创建 user provider 需要的信息自由添加,可以通过 Auth::createUserProvider('myuserprovider') 创建
    ],
    Nach dem Login kopieren

    设置 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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP vs. Flutter: Die beste Wahl für die mobile Entwicklung PHP vs. Flutter: Die beste Wahl für die mobile Entwicklung May 06, 2024 pm 10:45 PM

PHP und Flutter sind beliebte Technologien für die mobile Entwicklung. Flutter zeichnet sich durch plattformübergreifende Funktionen, Leistung und Benutzeroberfläche aus und eignet sich für Anwendungen, die eine hohe Leistung, plattformübergreifende und benutzerdefinierte Benutzeroberfläche erfordern. PHP eignet sich für serverseitige Anwendungen mit geringerer Leistung und nicht plattformübergreifend.

Wie verwende ich objektrelationales Mapping (ORM) in PHP, um Datenbankoperationen zu vereinfachen? Wie verwende ich objektrelationales Mapping (ORM) in PHP, um Datenbankoperationen zu vereinfachen? May 07, 2024 am 08:39 AM

Datenbankoperationen in PHP werden durch ORM vereinfacht, das Objekte in relationalen Datenbanken abbildet. EloquentORM in Laravel ermöglicht Ihnen die Interaktion mit der Datenbank mithilfe einer objektorientierten Syntax. Sie können ORM verwenden, indem Sie Modellklassen definieren, Eloquent-Methoden verwenden oder in der Praxis ein Blog-System erstellen.

Analyse der Vor- und Nachteile von PHP-Unit-Test-Tools Analyse der Vor- und Nachteile von PHP-Unit-Test-Tools May 06, 2024 pm 10:51 PM

Analyse des PHP-Unit-Test-Tools: PHPUnit: Geeignet für große Projekte, bietet umfassende Funktionalität und ist einfach zu installieren, kann jedoch ausführlich und langsam sein. PHPUnitWrapper: geeignet für kleine Projekte, einfach zu verwenden, optimiert für Lumen/Laravel, verfügt jedoch über eingeschränkte Funktionalität, bietet keine Code-Coverage-Analyse und hat begrenzte Community-Unterstützung.

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Jun 01, 2024 pm 01:34 PM

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

See all articles