Dieser Artikel stellt hauptsächlich das Laravel-Benutzerauthentifizierungssystem vor (grundlegende Einführung), das einen gewissen Referenzwert hat. Jetzt kann ich es mit allen teilen. Freunde in Not können sich darauf beziehen
Entwickler, die Laravel verwendet haben, wissen, dass Laravel über ein Authentifizierungssystem verfügt, das grundlegende Benutzerregistrierung, Anmeldung, Authentifizierung und Passwortabruf ermöglicht. Wenn die vom Auth-System bereitgestellten Grundfunktionen nicht den Anforderungen entsprechen, ist dies möglich Dennoch ist es sehr praktisch, diese Grundfunktionen zu erweitern. In diesem Artikel werfen wir zunächst einen Blick auf die Kernkomponenten des Laravel Auth-Systems.
Der Kern des Auth-Systems besteht aus dem „Wächter“ und „Anbieter“ der Authentifizierungskomponente von Laravel. Der Watcher definiert, wie der Benutzer für jede Anfrage authentifiziert werden soll. Beispielsweise verwendet der eigene Sitzungswächter von Laravel Sitzungsspeicher und Cookies, um den Status aufrechtzuerhalten.
In der folgenden Tabelle sind die Kernkomponenten des Laravel Auth-Systems aufgeführt
名称 | 作用 |
---|---|
Auth | AuthManager的Facade |
AuthManager | Auth认证系统面向外部的接口,认证系统通过它向应用提供所有Auth用户认证相关的方法,而认证方法的具体实现细节由它代理的具体看守器(Guard)来完成。 |
Guard | 看守器,定义了该如何认证每个请求中用户 |
User Provider | 用户提供器,定义了如何从持久化的存储数据中检索用户 |
In diesem Artikel werden wir diese Kernkomponenten im Detail vorstellen und dann die Funktionsdetails jeder Komponente in die oben am Ende des Artikels angegebene Tabelle aktualisieren.
Führen Sie einfach die Befehle php artisan make:auth
und php artisan migrate
in der neuen Laravel-Anwendung aus, um die vom Auth-System benötigten Routen, Ansichten und Datentabellen zu generieren Projekt.
php artisan make:auth
Nach der Ausführung wird die vom Auth-Authentifizierungssystem benötigte Ansichtsdatei generiert. Außerdem wird die Antwortroute zur Routingdatei hinzugefügt web.php
:
Auth::routes();
Auth
Separat in der Facade-Datei ist die routes
statische Methode
public static function routes() { static::$app->make('router')->auth(); }
definiert, sodass die spezifischen Routing-Methoden von Auth in der IlluminateRoutingRouter
-Methode von auth
definiert sind des Facade-Klassen-Proxys können Sie die vorherige Analyse des Facade-Quellcodes in den Kapiteln überprüfen.
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'); } }
In der auth
-Methode können Sie deutlich die Routing-URIs und die entsprechenden Controller und Methoden aller im Authentifizierungssystem bereitgestellten Funktionen sehen.
Mit dem Authentifizierungssystem von Laravel ist fast alles bereits für Sie konfiguriert. Seine Konfigurationsdatei befindet sich unter config/auth.php
und enthält klar kommentierte Konfigurationsoptionen zur Anpassung des Verhaltens des Authentifizierungsdienstes.
<?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, ], ], ];
Der Kern des Auth-Systems besteht aus dem „Wächter“ und „Anbieter“ der Authentifizierungskomponente von Laravel. Der Watcher definiert, wie der Benutzer für jede Anfrage authentifiziert werden soll. Beispielsweise verwendet der integrierte session
-Watcher von Laravel Sitzungsspeicher und Cookies, um den Status aufrechtzuerhalten.
Der Anbieter definiert, wie Benutzer aus persistenten Speicherdaten abgerufen werden. Laravel bietet Unterstützung für das Abrufen von Benutzern mithilfe von Eloquent und dem Datenbankabfrage-Builder. Natürlich können Sie bei Bedarf auch andere Anbieter anpassen.
Die obige Konfigurationsdatei bedeutet also, dass das Laravel-Authentifizierungssystem standardmäßig das Web-Guard-Konfigurationselement verwendet. Der im Konfigurationselement verwendete Guard ist SessionGuard und der verwendete Benutzeranbieter ist EloquentProvider
Das von der Anbieter Ja AppUser
.
Der Guard definiert, wie der Benutzer bei jeder Anfrage authentifiziert wird. Das mit Laravel gelieferte Authentifizierungssystem verwendet standardmäßig die integrierten Methoden SessionGuard
und SessionGuard
In Guard Contracts definierte Methoden sind die grundlegende Methode, auf der die Standardauthentifizierungsmethode des Laravel Auth-Systems basiert. IlluminateContractsAuth
IlluminateContractsAuthStatefulGuard
Schauen wir uns zunächst an, welche Vorgänge diese grundlegenden Methoden ausführen sollen, und lernen dann die spezifische Implementierung dieser Methoden kennen, wenn wir analysieren, wie Laravel Benutzer über SessionGuard authentifiziert. 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); }
Der verwendete Benutzeranbieter ist
Wenn wir im nächsten Kapitel die Implementierungsdetails des Laravel Auth-Systems analysieren, werden wir einen Blick darauf werfen, wie die abstrakte Methode im Benutzeranbietervertrag implementiert. config/auth.php
IlluminateAuthEloquentUserProvider
ZusammenfassungEloquentUserProvider
名称 | 作用 |
---|---|
Auth | AuthManager的Facade |
AuthManager | Auth认证系统面向外部的接口,认证系统通过它向应用提供所有Auth用户认证相关的方法,而认证方法的具体实现细节由它代理的具体看守器(Guard)来完成。 |
Guard | 看守器,定义了该如何认证每个请求中用户,认证时需要的用户数据会通过用户数据提供器来获取。 |
User Provider | 用户提供器,定义了如何从持久化的存储数据中检索用户,Guard认证用户时会通过提供器取用户的数据,所有的提供器都是IlluminateContractsAuthUserProvider接口的实现,提供了从持久化存储中取用户数据的具体实现细节。 |
Im nächsten Kapitel werden wir uns die Implementierungsdetails der eigenen Benutzerauthentifizierungsfunktion von Laravel ansehen.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Implementierungsdetails des Laravel-Benutzerauthentifizierungssystems
Das Laravel WeChat-Applet erhält Benutzerdetails und Gürtelanalyse Parameter-Applet-Code-Erweiterung
Das obige ist der detaillierte Inhalt vonLaravel-Benutzerauthentifizierungssystem (grundlegende Einführung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!