Recherche…


Multi authentification

Laravel vous permet d'utiliser plusieurs types d'authentification avec des gardes spécifiques.

En laravel 5.3, l'authentification multiple est peu différente de celle de Laravel 5.2

Je vais vous expliquer comment implémenter la fonctionnalité d'authentification multiple dans 5.3

Tout d'abord, vous avez besoin de deux modèles d'utilisateur différents

cp App/User.php App/Admin.php

changez le nom de la classe en Admin et définissez l'espace de noms si vous utilisez des modèles différents. ça devrait ressembler

App \ Admin.php

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Authenticatable
{
    use Notifiable;

    protected $fillable = ['name', 'email', 'password'];
    protected $hidden   = ['password', 'remember_token'];

}

Vous devez également créer une migration pour admin

php artisan make:migration create_admins_table

puis modifiez le fichier de migration avec le contenu de la migration utilisateur par défaut. Ressemble à ça

<?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->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');        
            $table->rememberToken();
            $table->timestamps();

            $table->softDeletes();
        });
    }

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

éditer config / auth.php

'guards'    => [
        'web'   => [
            'driver'   => 'session',
            'provider' => 'users',
        ],

        'api'   => [
            'driver'   => 'token',
            'provider' => 'users',
        ],
        //Add Admin Guard
        'admin' => [
            'driver'   => 'session',
            'provider' => 'admins',
        ],
    ],

et

'providers' => [
        'users'  => [
            'driver' => 'eloquent',
            'model'  => App\User::class,
        ],
        //Add Admins Provider
        'admins' => [
            'driver' => 'eloquent',
            'model'  => App\Admin::class,
        ],
    ],

Notez que nous ajoutons deux entrées. une variable de garde dans la variable fournisseurs .

Et voici comment vous utilisez l'autre garde puis "web"

Mon appli \ Http \ Controllers \ Admin \ LoginController

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{

    use AuthenticatesUsers;

    protected $guard = 'admin';

    protected $redirectTo = '/admin/';

    public function showLoginForm()
    {
        return view('admin.login');
    }

    protected function guard()
    {
        return Auth::guard($this->guard);
    }

}

cela nécessite peu d'explications.

Auth :: guard ('admin') vous permettra d'utiliser des méthodes d'authentification (telles que la connexion, la déconnexion, l'enregistrement, etc.) avec votre administrateur.

Par exemple

Auth::guard('admin')->login($user)

va rechercher $ user dans la table des admins et se connecter avec l'utilisateur

Auth::login($user)

travaillera normalement avec la table des utilisateurs. La garde par défaut est spécifiée dans config / auth.php avec le tableau par défaut . En frais laravel c'est "web".

Dans le contrôleur, vous devez implémenter des méthodes à partir de AuthenticatesUsers pour afficher vos chemins de vue personnalisés. Et vous devez implémenter d'autres fonctions telles que la garde pour utiliser vos nouveaux gardes utilisateurs.

Dans cet exemple, mon login admin est admin / login.blade

Et en implémentant la fonction guard () pour retourner Auth :: guard ('admin'), toutes les méthodes de trait AuthenticatesUsers fonctionnent avec la garde "admin".

Dans les versions antérieures de laravel, ceci est peu différent de 5,3

en 5.2, la fonction getGuard renvoie la variable $ guard de la classe et de la fonction principale (login)

Auth::guard($guard)->attempt(...)

en 5.3, la fonction de garde retourne Auth :: guard () et la fonction principale l'utilise comme

$this->guard()->attempt(...)


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow