Autenticaciones múltiples basadas en roles de Laravel 8
Hoy leerá sobre cómo manejar múltiples autenticaciones basadas en roles en Laravel, que muestra autenticaciones basadas en roles de usuario incluso si tiene múltiples roles de usuario sin usar ninguna biblioteca.
En este artículo, voy a explicar cómo manejar correctamente múltiples autenticaciones basadas en roles en la versión actual de Laravel y cómo manejarlas de manera eficiente.
Vamos a utilizar el escenario de este artículo, donde tenemos 3 usuarios con diferentes roles y diferentes paneles a los que redirigir al iniciar sesión correctamente.
Los usuarios son los siguientes:
- Administración
- Jugadores
- Scouts
Muy bien, si el escenario es lo suficientemente claro y es lo que estás buscando, profundicemos en el tutorial.
Antes de profundizar, si es un desarrollador de backend o desea profundizar en esta trayectoria profesional, únase a otros desarrolladores para recibir artículos diarios sobre el desarrollo de backend que impulsarán su productividad.
Empezando
Comencemos por configurar nuestros proyectos de Laravel e instalar las bibliotecas necesarias para manejar las autenticaciones basadas en roles de Laravel.
Comenzaremos instalando un nuevo proyecto de Laravel para demostrarlo, pero puede omitir este proceso si ya tiene su proyecto.
El siguiente comando se puede usar para instalar un nuevo proyecto de Laravel, o puede consultar la documentación aquí.
composer create-project --prefer-dist laravel/laravel MultiAuth
Configuración de bases de datos
A continuación, configuremos nuestra base de datos y configuremos nuestro archivo .env
para conectarse a nuestra base de datos correctamente.
Puede crear su base de datos con cualquier cliente de base de datos de su elección y haga clic aquí para ver cómo configurar su base de datos correctamente.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=DB NAME HERE DB_USERNAME=DB USERNAME HERE DB_PASSWORD=DB PASSWORD HERE
Ahora, configuremos nuestros esquemas de base de datos Eloquent.
<?phpuse Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateUsersTable extends Migration{/*** Run the migrations.* @return void*/public function up(){ Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('role'); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps();});}/*** Reverse the migrations.* @return void*/public function down(){ Schema::dropIfExists('users');}}
Después de configurar todo y crear su esquema como se muestra arriba.
Ejecute el siguiente comando:
php artisan migrate
Configurar la autenticación
Avanzaremos para configurar nuestra Laravel Auth, esto creará un registro de usuario completo y un sistema de inicio de sesión para nuestro nuevo proyecto.
En primer lugar, instalaremos el paquete Auth para ampliar el sistema Auth.
composer require laravel/ui
Para generar la interfaz de usuario, ejecute el siguiente comando:
php artisan ui bootstrap --auth npm run install npm run dev
Crea el middleware
A continuación, crearemos un middleware diferente para los diferentes usuarios y los registraremos en el archivo kernel.php
.
php artisan make:middleware Admin php artisan make:middleware Player // Repeat for all users
Configurar el middleware
Ahora agregue los siguientes códigos en cada uno de los middleware y permita el siguiente método solo en el rol que sea igual al middleware.
<?phpnamespace App\Http\Middleware;use Auth;use Closure;class Player{/*** Handle an incoming request.* @param \Illuminate\Http\Request $request* @param \Closure $next* @return mixed*/public function handle($request, Closure $next){ if (!Auth::check()) { return redirect()->route('login'); } if (Auth::user()->role == 'scout') { return redirect()->route('scout'); } if (Auth::user()->role == 'player') { return $next($request); } if (Auth::user()->role == 'admin') { return redirect()->route('admin'); } }}
En el middleware Player
anterior, cuando el rol es igual al player
, usamos el método return the $next
; de lo contrario, redirigimos a las otras rutas.
Ahora, registremos los diferentes middleware que hemos creado anteriormente.
/*** The application's route middleware.* These middleware may be assigned to groups or used individually.* @var array*/protected $routeMiddleware = ['auth' => \App\Http\Middleware\Authenticate::class,// .............'player' => \App\Http\Middleware\Player::class,'admin' => \App\Http\Middleware\Admin::class,'scout' => \App\Http\Middleware\Scout::class];
Crea rutas:
Después de registrar las rutas, vaya a web.php y agregue los siguientes códigos para mapear las rutas al middleware apropiado.
/*|----------------------------------------------------------| Web Routes|----------------------------------------------------------*/Route::get('/', function () {return view('welcome');});Auth::routes();Route::get('/player', 'PlayerController@index')->name('player')->middleware('player');Route::get('/admin', 'AdminController@index')->name('admin')->middleware('admin');Route::get('/scout', 'ScoutController@index')->name('scout')->middleware('scout');// ...........
Actualizar controlador de inicio de sesión
A continuación, actualizaremos el controlador de inicio de sesión y agregaremos las siguientes líneas de código para redirigir a la ruta adecuada cuando un usuario inicie sesión correctamente.
namespace App\Http\Controllers\Auth;use App\Http\Controllers\Controller;use Illuminate\Foundation\Auth\AuthenticatesUsers;use Auth;class LoginController extends Controller{use AuthenticatesUsers;protected $redirectTo;public function redirectTo(){switch (Auth::user()->role) {case 'admin': $this->redirectTo = '/admin'; return $this->redirectTo; break;case 'player': $this->redirectTo = '/player'; return $this->redirectTo; break;case 'scout': $this->redirectTo = '/scout'; return $this->redirectTo; break;default: $this->redirectTo = '/login'; return $this->redirectTo;}// return $next($request);}}
Configurar las vistas
Por último, configuremos las diferentes páginas de destino para cada panel para mostrar los diferentes usuarios.
@section('content')<div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">Dashboard</div> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif You are in ADMIN Dashboard! </div> </div> </div> </div></div>@endsection
El código anterior muestra solo una demostración del panel de Admin
, puede crear tantos paneles como sea posible y agregar la ruta en el archivo web.php
con el middleware apropiado creado para ello.
Conclusión
Entiendo que hay muchas formas de ‘matar una rata’, queremos escuchar sus pensamientos y mejores prácticas sobre cómo resolver este mismo problema, si lo ha encontrado antes, cómo lo resolvió, escuchémoslo en la sección de comentarios a continuación. y actualizaremos esta publicación en consecuencia.
Puede obtener el código fuente completo aquí
Gracias por leer mi artículo.