Maison > Article > développement back-end > Exemples PHP des principes d'authentification Laravel et explication détaillée de l'authentification entièrement personnalisée
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();
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);
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();Laravel Trois gardes sont fournis par défaut : RequestGuard, TokenGuard, SessionGuard.
RequestGuard
IlluminateAuthRequestGuardRequestGuard 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
IlluminateAuthSessionGuardSessionGuard est le garde par défaut pour l'authentification Web Laravel.TokenGuard
IlluminateAuthTokenGuardTokenGuard convient à l'authentification API sans état via l'authentification par jeton.Interface UserProvider
IlluminateContractsAuthUserProviderL'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);Il existe deux fournisseurs d'utilisateurs par défaut dans Laravel : DatabaseUserProvider et EloquentUserProvider.
DatabaseUserProvider
IlluminateAuthDatabaseUserProviderObtenez le modèle d'authentification directement via la table de la base de données.
EloquentUserProvider
IlluminateAuthEloquentUserProviderObtenez le modèle d'authentification via le modèle éloquentAuthManager
IlluminateAuthAuthManagerGuard 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.添加 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.
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!