Utiliser les guards pour faire plusieurs authentifications avec Laravel 8 - Part I
Tags: laravel, php, french
Published: 2021-04-02 22:39:17

**Introduction**
Il existe plusieurs manières pour faire des authentifications multiples avec Laravel 8 . Mais aujourd'hui nous allons utiliser les guards pour faire plusieurs authentification.

**Prérequis**
Pour pouvoir installer Laravel 8 sur votre machine , Il faut remplir certaines conditions. Il faut que les éléments ci-dessous soient installés sur votre machine:

* PHP >= 7.3
* BCMath PHP Extension
* Ctype PHP Extension
* Fileinfo PHP extension
* JSON PHP Extension
* Mbstring PHP Extension
* OpenSSL PHP Extension
* PDO PHP Extension
* Tokenizer PHP Extension
* XML PHP Extension

Une fois les éléments installés sur notre machine, nous allons passer à l'étape suivante , créer notre application Laravel 8 .


**Créer notre application laravel**
Nous avons le choix entre plusieurs methodes pour installer Laravel.

* Utiliser le programme d'installation de laravel

Vous pouvez installer Laravel via le programme d'installation en tant que dépendance globale de Composer:



         composer global require laravel/installer
         laravel new multi_auth
         cd multi_auth
      


* Installation avec composer

 Cependant nous allons utiliser la methode d'installation avec Composer Create-Project . Pour cela il faut installer composer sur votre machine lien. Nous allons taper la ligne de commande ci-dessous dans votre terminal.

       composer create-project --prefer-dist laravel/laravel multi_auth
       cd multi_auth

Vous pouvez lire la documentation de Laravel [ici ](https://laravel.com/docs/8.x/installation) .


**Configuration de la base de données**
Dans cette partie nous allons configurer notre base de données dans le fichier .env . Pour la base de données j'utilise XAMPP que vous pouvez télécharger [ici ](https://www.apachefriends.org/fr/download.html) .


       DB_CONNECTION=mysql
       DB_HOST=127.0.0.1
       DB_PORT=3306
       DB_DATABASE=multi_auth (nom de la base données)
       DB_USERNAME=*****(nom utilisateur)
       DB_PASSWORD=*****(mot de passe)

**Création des migrations pour nos différentes tables d' utilisateurs**
 
Après avoir configuré notre Base de données , nous allons créer les migrations pour les tables admins et vendors . Par defaut laravel a déjà créé la migration pour la table users .

**Création des migrations , des classes model Admins et Vendors**

Nous pouvons créer simplement les migrations en entrant les lignes de commande suivantes :

     php artisan make:migration create_admins_table
     php artisan make:migration create_vendors_table

Ou vous pouvez créer les migrations et modèles à la fois en exécutant les lignes de commande ci-dessous:

    php artisan make:model Admin -m
    php artisan make:model Vendor -m

Après avoir créé nos différentes migrations et classes modèles , nous allons maintenant modifier le contenu . 
Vous trouverez les fichiers des migrations dans le dossier database/migrations et après modification devront ressembler à ceci:

**Migration Admins**

      <?php

          use Illuminate\Database\Migrations\Migration;
          use Illuminate\Database\Schema\Blueprint;
          use Illuminate\Support\Facades\Schema;

    class CreateAdminsTable extends Migration
         {
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('pseudo')->nullable();
            $table->string('firstname')->nullable();
            $table->string('lastname')->nullable();
            $table->string('phone')->unique();
            $table->string('email')->unique();
            $table->string('password');
            $table->boolean('super')->default(false);
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('admins');
    }
      }


**Migration Vendors**


     <?php

        use Illuminate\Database\Migrations\Migration;
        use Illuminate\Database\Schema\Blueprint;
        use Illuminate\Support\Facades\Schema;

    class CreateVendorsTable extends Migration
     {
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Vendors', function (Blueprint $table) {
            $table->id();
            $table->string('pseudo')->nullable();
            $table->string('firstname')->nullable();
            $table->string('lastname')->nullable();
            $table->string('phone')->unique();
            $table->string('email')->unique();
            $table->string('password');
            $table->boolean('super')->default(false);
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('vendors');
    }
    }


Nous allons definir un modèle pour Admins et Vendors pour pouvoir utiliser les différentes table du même nom pour l'authentification. Pour créer ces différents modèles .
 
Plus haut, nous avons précedemment exécuté la commande qui créait à la fois le modèles et les tables(migrations) pour admins et vendors . Vous devrez avoir deux fichiers admin et vendor dans le dossier suivant App/Models. 

Sinon, pour créer nos modèles, nous allons exécuter les lignes de commande ci-dessous dans notre terminal.

    php artisan make:model Admin
    php artisan make:model Vendor


**App/Models/Admin.php**


    <?php

        namespace App\Models;
        use Illuminate\Database\Eloquent\Factories\HasFactory;
        use Illuminate\Database\Eloquent\Model;
        use Illuminate\Notifications\Notifiable;
        use Illuminate\Foundation\Auth\User as Authenticatable;

    class Admin extends Authenticatable
    {
        
          use Notifiable;

          protected $guard = 'admin';

          
          protected $fillable = [
            'firstname', 'lastname', 'pseudo', 'phone', 'email', 
            'password',
          ];

          
         protected $hidden = [
            'password', 'remember_token',
         ];
     }


**App/Models/Vendor.php**

     <?php

       namespace App\Models;
       use Illuminate\Database\Eloquent\Factories\HasFactory;
       use Illuminate\Database\Eloquent\Model;
       use Illuminate\Notifications\Notifiable;
       use Illuminate\Foundation\Auth\User as Authenticatable;


     class Vendor extends Authenticatable
     {
        
          use Notifiable;
          protected $guard = 'vendor';

          
          protected $fillable = [
            'firstname', 'lastname', 'pseudo', 'phone', 'email', 
            'password',
          ];

          
         protected $hidden = [
            'password', 'remember_token',
         ];
         }



Nous maintenans passer à une autre étape, qui est celui de migrer (migrate) notre base de données . Pour cela , nous allons exécuter la commande suivante :
php artisan migrate
la migration étant faite, nous trouverons que les tables Admins , Vendors et Users ont été créés . 
Aujoutons les guards (gardiens)
Nous allons ouvrir le fichier **config/auth.php** et ajouter deux nouveaux guards admins et vendors . 


     'guards' => [
         'web' => [
             'driver' => 'session',
             'provider' => 'users',
         ],
  
         'api' => [
             'driver' => 'token',
             'provider' => 'users',
             'hash' => false,
         ],
         'user' => [
              'driver' => 'session',
              'provider' => 'users',
         ],
         'admin' => [
               'driver' => 'session',
               'provider' => 'admins',
         ],
         'vendor' => [
                 'driver' => 'session',
                 'provider' => 'vendors',
         ],
      ],

Nous venons d'ajouter deux nouveaux guards et avons défini leurs providers. Dans le même fichier **config/auth.php** , nous allons aujouter nos nouveaux providers.
   

       'providers' => [
             'users' => [
                   'driver' => 'eloquent',
                   'model' => App\Models\User::class,
              ],

              'admins' => [
                     'driver' => 'eloquent',
                     'model' => App\Models\Admin::class,
               ],

               'vendors' => [
                       'driver' => 'eloquent',
                       'model' => App\Models\Vendor::class,
               ],
         ],

*Un provider indique à Laravel ce qu'il faut utiliser pour l'authentification ou la validation lorsque nous essayons d'utiliser le garde.*

La suite dans la seconde partie.