Heim  >  Artikel  >  Backend-Entwicklung  >  Laravel-Benutzerauthentifizierungssystem (grundlegende Einführung)

Laravel-Benutzerauthentifizierungssystem (grundlegende Einführung)

不言
不言Original
2018-07-06 14:18:413438Durchsuche

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

Benutzerauthentifizierungssystem (grundlegende Einführung).

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.

Beginnen Sie mit der Verwendung des Auth-Systems.

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:authNach 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 [

    /*
    |--------------------------------------------------------------------------
    | 认证的默认配置
    |--------------------------------------------------------------------------
    |
    | 设置了认证用的默认"看守器"和密码重置的选项
    |
    */

    &#39;defaults&#39; => [
        &#39;guard&#39; => &#39;web&#39;,
        &#39;passwords&#39; => &#39;users&#39;,
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | 定义项目使用的认证看守器,默认的看守器使用session驱动和Eloquent User 用户数据提供者
    |
    | 所有的驱动都有一个用户提供者,它定义了如何从数据库或者应用使用的持久化用户数据的存储中取出用户信息
    |
    | Supported: "session", "token"
    |
    */

    &#39;guards&#39; => [
        &#39;web&#39; => [
            &#39;driver&#39; => &#39;session&#39;,
            &#39;provider&#39; => &#39;users&#39;,
        ],

        &#39;api&#39; => [
            &#39;driver&#39; => &#39;token&#39;,
            &#39;provider&#39; => &#39;users&#39;,
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | 所有的驱动都有一个用户提供者,它定义了如何从数据库或者应用使用的持久化用户数据的存储中取出用户信息
    |
    | Laravel支持通过不同的Guard来认证用户,这里可以定义Guard的用户数据提供者的细节:
    |        使用什么driver以及对应的Model或者table是什么
    |
    | Supported: "database", "eloquent"
    |
    */

    &#39;providers&#39; => [
        &#39;users&#39; => [
            &#39;driver&#39; => &#39;eloquent&#39;,
            &#39;model&#39; => App\Models\User::class,
        ],

        // &#39;users&#39; => [
        //     &#39;driver&#39; => &#39;database&#39;,
        //     &#39;table&#39; => &#39;users&#39;,
        // ],
    ],

    /*
    |--------------------------------------------------------------------------
    | 重置密码相关的配置
    |--------------------------------------------------------------------------
    |
    */

    &#39;passwords&#39; => [
        &#39;users&#39; => [
            &#39;provider&#39; => &#39;users&#39;,
            &#39;table&#39; => &#39;password_resets&#39;,
            &#39;expire&#39; => 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.

Guard

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. IlluminateContractsAuthIlluminateContractsAuthStatefulGuard 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

IlluminateContractsAuthGuard

Diese Datei definiert die grundlegende Authentifizierungsmethode

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);
}

IlluminateContractsAuthStatefulGuard

Dieser Vertrag definiert die Methode, die zur Authentifizierung von Benutzern im Laravel-Authentifizierungssystem verwendet wird Neben der Authentifizierung von Benutzern geht es auch darum, den Authentifizierungsstatus des Benutzers nach erfolgreicher Benutzerauthentifizierung beizubehalten.

<?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();
}

IlluminateContractsAuthSupportsBasicAuth

Definiert, wie Benutzer über Http Basic Auth authentifiziert werden.

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 = &#39;email&#39;, $extraConditions = []);

    /**
     * 进行无状态的Http Basic Auth认证 (认证后不会设置session和cookies)
     *
     * @param  string  $field
     * @param  array  $extraConditions
     * @return \Symfony\Component\HttpFoundation\Response|null
     */
    public function onceBasic($field = &#39;email&#39;, $extraConditions = []);
}

Benutzeranbieter

Der Benutzeranbieter definiert, wie Persistenz von Benutzern abgerufen werden soll Aus den gespeicherten Daten definiert Laravel einen Benutzeranbietervertrag (Schnittstelle). Da eine einheitliche Schnittstelle implementiert ist, unabhängig davon, ob es sich um eine eigene oder eine angepasste Schnittstelle von Laravel handelt, können alle Benutzeranbieter von Guard verwendet werden .

Benutzer-Provider-Vertrag

Die folgenden abstrakten Methoden sind im Vertrag definiert und müssen vom Benutzer-Provider implementiert werden:

<?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);
}

Sie können den Laravel-Standard über die Konfiguration sehen Datei

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.phpIlluminateAuthEloquentUserProviderZusammenfassungEloquentUserProvider

In diesem Abschnitt stellen wir hauptsächlich die Grundlagen des Laravel Auth-Systems vor, einschließlich der Kernkomponenten des Auth-Systems, des Watchers und des Anbieters, der die Benutzerauthentifizierung durch Aufrufen des angegebenen Watchers abschließt In der Konfigurationsdatei werden die für den Authentifizierungsprozess erforderlichen Benutzerdaten vom Benutzer über den Benutzeranbieter abgerufen. Die folgende Tabelle fasst die Kernkomponenten des Auth-Systems und die Rolle jeder Komponente zusammen.

名称 作用
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!

Stellungnahme:
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