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(...)