Cet article présente principalement le système d'authentification des utilisateurs Laravel (introduction de base), qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Les développeurs qui ont utilisé Laravel savent que Laravel est livré avec un système d'authentification pour fournir l'enregistrement de base des utilisateurs, la connexion, l'authentification et la récupération du mot de passe. Si les fonctions de base fournies par le système d'authentification ne répondent pas aux besoins, il peut le faire. Il est néanmoins très pratique de développer ces fonctions de base. Dans cet article, nous examinons d'abord les composants principaux du système Laravel Auth.
Le noyau du système Auth est composé du « gardien » et du « fournisseur » du composant d'authentification de Laravel. L'observateur définit comment l'utilisateur doit être authentifié pour chaque demande. Par exemple, le propre garde de session de Laravel utilise le stockage de session et les cookies pour maintenir l'état.
Le tableau suivant répertorie les composants principaux du système Laravel Auth
名称 | 作用 |
---|---|
Auth | AuthManager的Facade |
AuthManager | Auth认证系统面向外部的接口,认证系统通过它向应用提供所有Auth用户认证相关的方法,而认证方法的具体实现细节由它代理的具体看守器(Guard)来完成。 |
Guard | 看守器,定义了该如何认证每个请求中用户 |
User Provider | 用户提供器,定义了如何从持久化的存储数据中检索用户 |
Dans cet article, nous présenterons ces composants principaux en détail, puis mettrons à jour les détails des fonctions de chaque composant avec le tableau ci-dessus à la fin de l'article.
Exécutez simplement les commandes php artisan make:auth
et php artisan migrate
sur la nouvelle application Laravel pour générer les itinéraires, les vues et les tables de données requis par le système Auth dans le projet.
php artisan make:auth
Après l'exécution, les fichiers de vue requis par le système d'authentification Auth seront générés. De plus, la route de réponse sera ajoutée au fichier de routage web.php
:
Auth::routes();
Fichier Façade La méthode statique Auth
est définie séparément dans routes
public static function routes() { static::$app->make('router')->auth(); }
de IlluminateRoutingRouter
. comment trouver la classe réelle du proxy de classe Facade. Le chapitre précédent de l'analyse du code source de Facade. auth
namespace Illuminate\Routing; class Router implements RegistrarContract, BindingRegistrar { /** * Register the typical authentication routes for an application. * * @return void */ public function auth() { // Authentication Routes... $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); $this->post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); $this->post('register', 'Auth\RegisterController@register'); // Password Reset Routes... $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); $this->post('password/reset', 'Auth\ResetPasswordController@reset'); } }
, vous pouvez voir clairement les URI de routage et les contrôleurs et méthodes correspondants de toutes les fonctions fournies dans le système d'authentification. auth
et contient des options de configuration clairement commentées permettant d'ajuster le comportement du service d'authentification. config/auth.php
<?php return [ /* |-------------------------------------------------------------------------- | 认证的默认配置 |-------------------------------------------------------------------------- | | 设置了认证用的默认"看守器"和密码重置的选项 | */ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], /* |-------------------------------------------------------------------------- | Authentication Guards |-------------------------------------------------------------------------- | | 定义项目使用的认证看守器,默认的看守器使用session驱动和Eloquent User 用户数据提供者 | | 所有的驱动都有一个用户提供者,它定义了如何从数据库或者应用使用的持久化用户数据的存储中取出用户信息 | | Supported: "session", "token" | */ 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ], /* |-------------------------------------------------------------------------- | User Providers |-------------------------------------------------------------------------- | | 所有的驱动都有一个用户提供者,它定义了如何从数据库或者应用使用的持久化用户数据的存储中取出用户信息 | | Laravel支持通过不同的Guard来认证用户,这里可以定义Guard的用户数据提供者的细节: | 使用什么driver以及对应的Model或者table是什么 | | Supported: "database", "eloquent" | */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* |-------------------------------------------------------------------------- | 重置密码相关的配置 |-------------------------------------------------------------------------- | */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ], ];
intégré de Laravel utilise le stockage de session et les cookies pour maintenir l'état. session
Le modèle utilisé par le. fournisseur Oui EloquentProvider
. AppUser
intégré par défaut. En plus d'implémenter les méthodes du contrat SessionGuard
, SessionGuard
implémente également les méthodes des contrats IlluminateContractsAuth
et IlluminateContractsAuthStatefulGuard
. Les méthodes définies dans les contrats de garde sont la méthode de base sur laquelle s'appuie la méthode d'authentification par défaut du système Laravel Auth. IlluminateContractsAuthSupportsBasicAuth
namespace Illuminate\Contracts\Auth; interface Guard { /** * 返回当前用户是否时已通过认证,是返回true,否者返回false * * @return bool */ public function check(); /** * 验证是否时访客用户(非登录认证通过的用户) * * @return bool */ public function guest(); /** * 获取当前用户的用户信息数据,获取成功返回用户User模型实例(\App\User实现了Authenticatable接口) * 失败返回null * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function user(); /** * 获取当前认证用户的用户ID,成功返回ID值,失败返回null * * @return int|null */ public function id(); /** * 通过credentials(一般是邮箱和密码)验证用户 * * @param array $credentials * @return bool */ public function validate(array $credentials = []); /** * 将一个\App\User实例设置成当前的认证用户 * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @return void */ public function setUser(Authenticatable $user); }
<?php namespace Illuminate\Contracts\Auth; interface StatefulGuard extends Guard { /** * Attempt to authenticate a user using the given credentials. * 通过给定用户证书来尝试认证用户,如果remember为true则在一定时间内记住登录用户 * 认证通过后会设置Session和Cookies数据 * @param array $credentials * @param bool $remember * @return bool */ public function attempt(array $credentials = [], $remember = false); /** * 认证用户,认证成功后不会设置session和cookies数据 * * @param array $credentials * @return bool */ public function once(array $credentials = []); /** * 登录用户(用户认证成功后设置相应的session和cookies) * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @param bool $remember * @return void */ public function login(Authenticatable $user, $remember = false); /** * 通过给定的用户ID登录用户 * * @param mixed $id * @param bool $remember * @return \Illuminate\Contracts\Auth\Authenticatable */ public function loginUsingId($id, $remember = false); /** * 通过给定的用户ID登录用户并且不设置session和cookies * * @param mixed $id * @return bool */ public function onceUsingId($id); /** * Determine if the user was authenticated via "remember me" cookie. * 判断用户是否时通过name为"remeber me"的cookie值认证的 * @return bool */ public function viaRemember(); /** * 登出用户 * * @return void */ public function logout(); }
namespace Illuminate\Contracts\Auth; interface SupportsBasicAuth { /** * 尝试通过HTTP Basic Auth来认证用户 * * @param string $field * @param array $extraConditions * @return \Symfony\Component\HttpFoundation\Response|null */ public function basic($field = 'email', $extraConditions = []); /** * 进行无状态的Http Basic Auth认证 (认证后不会设置session和cookies) * * @param string $field * @param array $extraConditions * @return \Symfony\Component\HttpFoundation\Response|null */ public function onceBasic($field = 'email', $extraConditions = []); }
<?php namespace Illuminate\Contracts\Auth; interface UserProvider { /** * 通过用户唯一ID获取用户数据 * * @param mixed $identifier * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function retrieveById($identifier); /** * Retrieve a user by their unique identifier and "remember me" token. * 通过Cookies中的"remeber me"令牌和用户唯一ID获取用户数据 * @param mixed $identifier * @param string $token * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function retrieveByToken($identifier, $token); /** * 更新数据存储中给定用户的remeber me令牌 * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @param string $token * @return void */ public function updateRememberToken(Authenticatable $user, $token); /** * 通过用户证书获取用户信息 * * @param array $credentials * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function retrieveByCredentials(array $credentials); /** * 验证用户的证书 * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @param array $credentials * @return bool */ public function validateCredentials(Authenticatable $user, array $credentials); }
Le fournisseur d'utilisateurs utilisé par Laravel par défaut est config/auth.php
Lorsque nous analyserons les détails d'implémentation du système Laravel Auth dans le chapitre suivant, nous verrons comment IlluminateAuthEloquentUserProvider
implémente la méthode abstraite dans l'utilisateur. contrat de prestataire. EloquentUserProvider
名称 | 作用 |
---|---|
Auth | AuthManager的Facade |
AuthManager | Auth认证系统面向外部的接口,认证系统通过它向应用提供所有Auth用户认证相关的方法,而认证方法的具体实现细节由它代理的具体看守器(Guard)来完成。 |
Guard | 看守器,定义了该如何认证每个请求中用户,认证时需要的用户数据会通过用户数据提供器来获取。 |
User Provider | 用户提供器,定义了如何从持久化的存储数据中检索用户,Guard认证用户时会通过提供器取用户的数据,所有的提供器都是IlluminateContractsAuthUserProvider接口的实现,提供了从持久化存储中取用户数据的具体实现细节。 |
Dans le prochain chapitre, nous examinerons les détails d'implémentation de la propre fonction d'authentification des utilisateurs de Laravel.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Détails de mise en œuvre du système d'authentification des utilisateurs Laravel
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!