Utiliser les guards pour faire plusieurs authentifications avec Laravel 8 - Part I

codecaiine

Yannick-Noël Aka

Posted on April 2, 2021

Utiliser les guards pour faire plusieurs authentifications avec Laravel 8 - Part I

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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode

Vous pouvez lire la documentation de Laravel ici .

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 .

   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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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');
}
  }
Enter fullscreen mode Exit fullscreen mode

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');
}
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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',
     ];
 }
Enter fullscreen mode Exit fullscreen mode

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',
     ];
     }
Enter fullscreen mode Exit fullscreen mode

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',
     ],
  ],
Enter fullscreen mode Exit fullscreen mode

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,
           ],
     ],
Enter fullscreen mode Exit fullscreen mode

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.

💖 💪 🙅 🚩
codecaiine
Yannick-Noël Aka

Posted on April 2, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related