Post Top Ad

Your Ad Spot

jueves, 8 de octubre de 2020

Redirección de autenticación de Laravel 8 usando redirectTo

 En este tutorial, aprenderemos cómo personalizar el sistema de autenticación en nuestra aplicación Laravel 8 para redirigir a los usuarios después de que se registren o inicien sesión en una ruta diferente según su función.

La mayoría de las veces, el sistema de autenticación proporcionado por Laravel 8 es suficiente para agregar inicio de sesión y registro a su aplicación web.

El andamiaje de autenticación que ahora se trasladó a una separada laravel/uipaquete proporciona fuera de las rutas y puntos de vista de la caja para el LoginControllerRegisterControllerResetPasswordControllerque están incluidas en su proyecto y son responsables de proporcionar la funcionalidad del sistema de autentificación.

Tenga en cuenta que el equipo de Laravel recomienda a los desarrolladores usar Jetstream para los nuevos proyectos de Laravel 8, pero también han actualizado el laravel/uipaquete a la versión 3 para usarlo con Laravel 8, especialmente si está actualizando su aplicación Laravel 7 anterior a la última versión.

Redirección de autenticación de Laravel 8 usando $redirectTo

Si echa un vistazo al app/Http/Controllers/Auth/LoginController.phparchivo, por ejemplo, encontrará el siguiente código:

<?php

namespace App\Http\Controllers\Auth;

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

class LoginController extends Controller
{

    use AuthenticatesUsers;

    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

Puede ver que $redirectToexiste una variable y tiene el valor de /homeadónde se redirige a los usuarios después de iniciar sesión.

En el sistema de autenticación integrado de Laravel, puede personalizar muchos lados, como la ruta de redirección, utilizando la $redirectTovariable que existe tanto en los controladores de inicio de sesión como de registro.

Si desea redirigir a sus usuarios a rutas diferentes a las predeterminadas después de que se registren o inicien sesión, simplemente debe cambiar el valor de $redirectTo.

Laravel 8 Auth Redirection usando el redirectTo()método

Ahora bien, ¿qué sucede si desea redirigir a los usuarios a una ruta en función de algunos criterios de usuario, como su función?

El sistema de autenticación de Laravel también cubre eso al proporcionar un redirectTo()método que puede usar en lugar de una $redirectTovariable.

Tomemos este ejemplo de LoginControllernuestra aplicación CRM agregando el redirectTo()método para redirigir a los usuarios administradores a una ruta diferente a la /homeruta:

<?php

namespace App\Http\Controllers\Auth;

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

class LoginController extends Controller
{
    use AuthenticatesUsers;


    protected $redirectTo = '/home';
    protected function redirectTo()
    {
        if (auth()->user()->role == 'admin') {
            return '/admin';
        }
        return '/home';
    }

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

También necesitamos hacer eso en el controlador de registro. Abra el app/Http/Controllers/Auth/RegisterController.phparchivo y actualícelo de la siguiente manera:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    use RegistersUsers;


    protected $redirectTo = '/home';
    protected function redirectTo()
    {
        if (auth()->user()->role == 'admin') {
            return '/admin';
        }
        return '/home';
    }


    public function __construct()
    {
        $this->middleware('guest');
    }


    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }


    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

Puede eliminar la $redirectTovariable o dejarla, ya que el redirectTo()método simplemente la anulará .

Creación de un controlador Laravel 8 para administrador

Ahora, todo lo que necesita es crear una /adminruta junto con un AdminControllerRegrese a su terminal y ejecute el siguiente comando artesanal:

$ php artisan make:controller AdminController

A continuación, abra el app/Http/Controllers/AdminController.phparchivo y actualícelo de la siguiente manera:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function index()
    {
        return "Hello, admin!";
    }
}

A continuación, abra el routes/web.phparchivo y agregue una ruta al controlador de administración de la siguiente manera:

Route::get('/admin', 'AdminController@index')->name('admin');

Conclusión

En este tutorial, hemos implementado la redirección en nuestra aplicación Laravel 8 CRM para que los usuarios administradores sean redirigidos a una ruta diferente mientras que los usuarios normales son redirigidos a la ruta de inicio. La redirección no hace cumplir ninguna regla de seguridad porque los usuarios normales aún podrán visitar la /adminruta. Necesitamos evitar eso usando un middleware que es el tema del próximo tutorial.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas