Maison  >  Article  >  développement back-end  >  Système d'authentification des utilisateurs Laravel (introduction de base)

Système d'authentification des utilisateurs Laravel (introduction de base)

不言
不言original
2018-07-06 14:18:413424parcourir

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

Système d'authentification des utilisateurs (introduction de base).

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.

Commencez à utiliser le système Auth

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:authAprè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();
}
, donc les méthodes de routage spécifiques d'Auth sont définies dans la méthode

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');
    }
}
Dans la méthode

, 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

Grâce au système d'authentification de Laravel, presque tout est déjà configuré pour vous. Son fichier de configuration se trouve à l'adresse

et contient des options de configuration clairement commentées permettant d'ajuster le comportement du service d'authentification. config/auth.php

<?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,
        ],
    ],

];
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é à chaque demande. Par exemple, l'observateur

intégré de Laravel utilise le stockage de session et les cookies pour maintenir l'état. session

Le fournisseur définit comment récupérer les utilisateurs à partir des données de stockage persistantes. Laravel prend en charge la récupération d'utilisateurs à l'aide d'Eloquent et du générateur de requêtes de base de données. Bien entendu, vous pouvez personnaliser d’autres fournisseurs selon vos besoins.

Donc, le fichier de configuration ci-dessus signifie que le système d'authentification Laravel utilise l'élément de configuration Web Guard par défaut. Le garde utilisé dans l'élément de configuration est SessionGuard, et le fournisseur d'utilisateurs utilisé est

Le modèle utilisé par le. fournisseur Oui EloquentProvider. AppUser

Guard

Le guard définit comment authentifier l'utilisateur à chaque requête. Le système d'authentification fourni avec Laravel utilise le

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

Examinons d'abord quelles opérations ces méthodes de base sont censées accomplir, puis nous connaîtrons la mise en œuvre spécifique de ces méthodes lorsque nous analyserons comment Laravel authentifie les utilisateurs via SessionGuard.

IlluminateContractsAuthGuard

Ce fichier définit la méthode d'authentification de base

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

Ce contrat définit les méthodes utilisées pour authentifier les utilisateurs dans le système d'authentification Laravel Le procédé, en plus d'authentifier l'utilisateur, implique également la manière de conserver le statut d'authentification de l'utilisateur une fois que l'utilisateur a été authentifié avec succès.

<?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

Définit la méthode d'authentification des utilisateurs via Http Basic Auth

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 = []);
}
Fournisseur d'utilisateurs

Ceci est défini dans le fournisseur d'utilisateurs Comment récupérer les utilisateurs à partir des données de stockage persistantes. Laravel définit un contrat de fournisseur d'utilisateurs (interface). Tous les fournisseurs d'utilisateurs doivent implémenter les méthodes abstraites définies dans cette interface, car une interface unifiée est implémentée, peu importe que Laravel soit fourni avec les deux fournisseurs d'utilisateurs. être utilisé par la Garde.

Contrat du fournisseur d'utilisateurs

Voici les méthodes abstraites définies dans le contrat qui doivent être mises en œuvre par le fournisseur d'utilisateurs :

<?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);
}
Vous pouvez le voir à travers la configuration file

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

Résumé

Dans cette section, nous présentons principalement les bases du système Laravel Auth, y compris les composants principaux du système Auth, l'observateur et le fournisseur complètent l'authentification de l'utilisateur en appelant l'observateur spécifié. dans le fichier de configuration., Les données utilisateur requises dans le processus d'authentification sont obtenues par le garde via le fournisseur d'utilisateurs. Le tableau suivant résume les composants de base du système d'authentification et le rôle de chaque composant.

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

L'applet Laravel WeChat obtient les détails de l'utilisateur et apporte une analyse de extension du code de l'applet de paramètre

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