Maison développement back-end tutoriel php Exemples PHP des principes d'authentification Laravel et explication détaillée de l'authentification entièrement personnalisée

Exemples PHP des principes d'authentification Laravel et explication détaillée de l'authentification entièrement personnalisée

Jul 12, 2018 pm 02:28 PM
laravel

J'ai récemment appris le framework Laravel, donc l'article suivant vous présente principalement les informations pertinentes sur les principes d'authentification de Laravel et l'authentification entièrement personnalisée. L'article le présente en détail à travers un exemple de code. Les amis qui en ont besoin peuvent s'y référer. . Ce qui suit est Apprenons avec l'éditeur

Avant-propos

La fonction d'authentification par défaut de Laravel est déjà très complète, mais nous en rencontrons souvent. certaines situations qui doivent être personnalisées, telles que les champs de vérification ne correspondent pas à ceux par défaut, comme la nécessité de répondre simultanément à l'authentification du nom d'utilisateur et de l'e-mail, etc. Comment créer un certificat entièrement personnalisé ? Plutôt qu'un tutoriel, je préfère vous présenter le principe de fonctionnement, afin qu'il vous soit plus facile de le modifier ou de le personnaliser vous-même.

Interface authentifiable

IlluminateContractsAuthAuthenticatable

Authenticable définit une interface qui doit être implémentée par un modèle ou une classe qui peut être utilisé pour l'authentification , c'est-à-dire que si vous devez utiliser une classe personnalisée pour l'authentification, vous devez implémenter les méthodes définies par cette interface.

// 获取唯一标识的,可以用来认证的字段名,比如 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();
Copier après la connexion

Par exemple, votre modèle d'authentification doit utiliser « jeton » au lieu de « mot de passe » comme vérification du mot de passe. Méthode getAuthPassword() La valeur de retour est 'token';

Trait authentique

IlluminateAuthAuthenticatable

Le trait authentique défini dans Laravel est également le trait d'authentification Laravel par défaut utilisé par le modèle User. Ce trait définit l'identifiant d'authentification par défaut du modèle User comme 'id', le champ du mot de passe comme 'password', le champ correspondant au jeton de mémorisation comme Remember_token, etc.

Certains paramètres peuvent être modifiés en remplaçant ces méthodes du modèle User.

Interface Guard

IlluminateContractsAuthGuard

L'interface Guard définit un modèle ou une classe qui implémente des méthodes d'authentification authentifiables (authentifiables) et certaines interfaces couramment utilisées.

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

Interface StatefulGuard

IlluminateContractsAuthStatefulGuard

L'interface StatefulGuard hérite de l'interface Guard, à l'exception de certains éléments de base définis dans Guard En plus de l'interface, un autre Guard avec état a également été ajouté

Les interfaces nouvellement ajoutées incluent celles-ci :

// 尝试根据提供的凭证验证用户是否合法
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();
Copier après la connexion

<🎜. >Laravel Trois gardes sont fournis par défaut : RequestGuard, TokenGuard, SessionGuard.

RequestGuard

IlluminateAuthRequestGuard

RequestGuard est un garde très simple. passé Passer dans une fermeture pour l'authentification. Vous pouvez ajouter un RequestGuard personnalisé en appelant Auth::viaRequest.

SessionGuard

IlluminateAuthSessionGuard

SessionGuard est le garde par défaut pour l'authentification Web Laravel.

TokenGuard

IlluminateAuthTokenGuard

TokenGuard convient à l'authentification API sans état via l'authentification par jeton.

Interface UserProvider

IlluminateContractsAuthUserProvider

L'interface UserProvider définit la méthode d'obtention du modèle d'authentification, comme l'obtention du modèle basé sur l'identifiant, l'obtention du modèle basé sur l'e-mail, etc.

// 通过唯一标示符获取认证模型
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);
Copier après la connexion

Il existe deux fournisseurs d'utilisateurs par défaut dans Laravel : DatabaseUserProvider et EloquentUserProvider.

DatabaseUserProvider

IlluminateAuthDatabaseUserProvider

Obtenez le modèle d'authentification directement via la table de la base de données.

EloquentUserProvider

IlluminateAuthEloquentUserProvider

Obtenez le modèle d'authentification via le modèle éloquent

AuthManager

IlluminateAuthAuthManager

Guard est utilisé pour authentifier si un utilisateur est authentifié avec succès, UserProvider est utilisé pour fournir la source du modèle d'authentification, et gère la garde et la personnalisation en fonction de la configuration du projet. Guard et d'autres fonctions sont implémentées via AuthManager.

AuthManager devrait être un peu comme la classe Context dans le pattern de stratégie et la factory dans la méthode factory D'une part, elle gère la Guard, et d'autre part, elle appelle la stratégie spécifique (Guard). ) via la méthode magique __call.

La classe d'implémentation correspondante de la façade Auth est AuthManager. AuthManager est enregistré en tant que singleton dans le conteneur et est utilisé pour gérer tous les travaux de garde, de fournisseur d'utilisateurs et de proxy de garde.

Authentification personnalisée

Sur la base des connaissances ci-dessus, vous pouvez savoir qu'il est très simple de personnaliser une authentification.

  • Créer un modèle d'authentification

Créer un modèle d'authentification personnalisé et implémenter l'interface Authentifiable

  • Créez un UserProvider personnalisé

Créez un UserProvider personnalisé, implémentez l'interface UserProvider et renvoyez le modèle d'authentification personnalisé ci-dessus

  • Créez un Guard personnalisé ;

Créez un Guard personnalisé et implémentez l'interface Guard ou StatefulGuard

  • 添加 guard creator 和 user provider creator 到 AuthManager 中

在 AppServiceProvider 的 boot 方法添加如下代码:

Auth::extend(&#39;myguard&#39;, function(){
 ...
 return new MyGuard(); //返回自定义 guard 实例
 ...
});

Auth::provider(&#39;myuserprovider&#39;, function(){
 return new MyUserProvider(); // 返回自定义的 user provider
});
Copier après la connexion

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

&#39;oustn&#39; => [
 &#39;driver&#39; => &#39;myguard&#39;,
 &#39;provider&#39; => &#39;myusers&#39;,
],
Copier après la connexion

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

&#39;myusers&#39; => [
 &#39;driver&#39; => &#39;myuserprovider&#39; // 里面具体的字段可以根据你创建 user provider 需要的信息自由添加,可以通过 Auth::createUserProvider(&#39;myuserprovider&#39;) 创建
],
Copier après la connexion

设置 config\auth.php 的 defaults.guard 为 oustn.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ? Comment utiliser le mappage objet-relationnel (ORM) en PHP pour simplifier les opérations de base de données ? May 07, 2024 am 08:39 AM

Les opérations de base de données en PHP sont simplifiées à l'aide d'ORM, qui mappe les objets dans des bases de données relationnelles. EloquentORM dans Laravel vous permet d'interagir avec la base de données en utilisant une syntaxe orientée objet. Vous pouvez utiliser ORM en définissant des classes de modèle, en utilisant des méthodes Eloquent ou en créant un système de blog dans la pratique.

Comparaison des dernières versions de Laravel et CodeIgniter Comparaison des dernières versions de Laravel et CodeIgniter Jun 05, 2024 pm 05:29 PM

Les dernières versions de Laravel 9 et CodeIgniter 4 fournissent des fonctionnalités et des améliorations mises à jour. Laravel9 adopte l'architecture MVC et fournit des fonctions telles que la migration de bases de données, l'authentification et le moteur de modèles. CodeIgniter4 utilise l'architecture HMVC pour fournir le routage, l'ORM et la mise en cache. En termes de performances, le modèle de conception basé sur le fournisseur de services de Laravel9 et le framework léger de CodeIgniter4 lui confèrent d'excellentes performances. Dans les applications pratiques, Laravel9 convient aux projets complexes qui nécessitent de la flexibilité et des fonctions puissantes, tandis que CodeIgniter4 convient au développement rapide et aux petites applications.

Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ? Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ? Jun 01, 2024 pm 01:34 PM

Comparez les capacités de traitement des données de Laravel et CodeIgniter : ORM : Laravel utilise EloquentORM, qui fournit un mappage relationnel classe-objet, tandis que CodeIgniter utilise ActiveRecord pour représenter le modèle de base de données en tant que sous-classe de classes PHP. Générateur de requêtes : Laravel dispose d'une API de requêtes chaînées flexible, tandis que le générateur de requêtes de CodeIgniter est plus simple et basé sur des tableaux. Validation des données : Laravel fournit une classe Validator qui prend en charge les règles de validation personnalisées, tandis que CodeIgniter a moins de fonctions de validation intégrées et nécessite un codage manuel des règles personnalisées. Cas pratique : l'exemple d'enregistrement d'utilisateur montre Lar

Laravel - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Jun 05, 2024 pm 07:50 PM

Pour les débutants, CodeIgniter a une courbe d'apprentissage plus douce et moins de fonctionnalités, mais couvre les besoins de base. Laravel offre un ensemble de fonctionnalités plus large mais a une courbe d'apprentissage légèrement plus raide. En termes de performances, Laravel et CodeIgniter fonctionnent bien. Laravel dispose d'une documentation plus complète et d'un support communautaire actif, tandis que CodeIgniter est plus simple, léger et possède de solides fonctionnalités de sécurité. Dans le cas pratique de la création d'une application de blog, EloquentORM de Laravel simplifie la manipulation des données, tandis que CodeIgniter nécessite une configuration plus manuelle.

Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Jun 04, 2024 am 09:09 AM

Lors du choix d'un framework pour de grands projets, Laravel et CodeIgniter ont chacun leurs propres avantages. Laravel est conçu pour les applications d'entreprise, offrant une conception modulaire, une injection de dépendances et un ensemble de fonctionnalités puissantes. CodeIgniter est un framework léger plus adapté aux projets de petite et moyenne taille, mettant l'accent sur la rapidité et la facilité d'utilisation. Pour les grands projets avec des exigences complexes et un grand nombre d'utilisateurs, la puissance et l'évolutivité de Laravel sont plus adaptées. Pour les projets simples ou les situations avec des ressources limitées, les capacités de développement légères et rapides de CodeIgniter sont plus idéales.

Laravel vs CodeIgniter : quel framework est le meilleur pour les petits projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les petits projets ? Jun 04, 2024 pm 05:29 PM

Pour les petits projets, Laravel convient aux projets plus importants qui nécessitent des fonctionnalités et une sécurité élevées. CodeIgniter convient aux très petits projets qui nécessitent légèreté et facilité d'utilisation.

Questions et réponses sur la conception de l'architecture de microservices d'applications d'entreprise PHP Questions et réponses sur la conception de l'architecture de microservices d'applications d'entreprise PHP May 07, 2024 am 09:36 AM

L'architecture des microservices utilise des frameworks PHP (tels que Symfony et Laravel) pour implémenter des microservices et suit les principes RESTful et les formats de données standard pour concevoir des API. Les microservices communiquent via des files d'attente de messages, des requêtes HTTP ou gRPC et utilisent des outils tels que Prometheus et ELKStack pour la surveillance et le dépannage.

See all articles