es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Redirigir Laravel 8 Fortify

Necesito ayuda con las redirecciones después del inicio de sesión con Laravel 8 Fortify. Sé cómo hacerlo en un controlador de inicio de sesión, pero con Fortify, hay un LoginResponse del que no estoy seguro de cómo hacerlo. Sé que en RouteServiceProvider puedo cambiarlo a cualquier lugar, pero tengo roles a los que quiero redirigir a diferentes paneles de control según el rol.

En el antiguo controlador de inicio de sesión, haría lo siguiente. ¿Cómo cambiaría esto al LoginResponse de Fortify?

public function redirectTo()
{
    if(Auth::user()->hasRole('admin')){
        $this->redirectTo = route('admin.dashboard');
        return $this->redirectTo;
    }
    if(Auth::user()->hasRole('manager')){
        $this->redirectTo = route('manager.dashboard');
        return $this->redirectTo;
    }
    if(Auth::user()->hasRole('employee')){
        $this->redirectTo = route('employee.dashboard');
        return $this->redirectTo;
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para redirigir a los usuarios después del inicio de sesión con Laravel 8 Fortify según sus roles, es necesario crear una clase de respuesta de inicio de sesión personalizada y anular su método toResponse.

    Aquí hay un ejemplo de cómo hacerlo:

    1. Cree una nueva clase llamada CustomLoginResponse que extienda Illuminate\Http\Response.
    use App\Models\User;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
    
    class CustomLoginResponse implements LoginResponseContract
    {
        public function toResponse($request)
        {
            if (Auth::user()->hasRole('admin')) {
                return redirect()->route('admin.dashboard');
            }
    
            if (Auth::user()->hasRole('manager')) {
                return redirect()->route('manager.dashboard');
            }
    
            if (Auth::user()->hasRole('employee')) {
                return redirect()->route('employee.dashboard');
            }
    
            // fallback in case the user has no role assigned
            return redirect()->intended(config('fortify.home'));
        }
    }
    
    1. En su FortifyServiceProvider, anule el enlace loginResponse para devolver CustomLoginResponse.
    use App\Http\Responses\CustomLoginResponse;
    use Laravel\Fortify\FortifyServiceProvider;
    
    class AppServiceProvider extends FortifyServiceProvider
    {
        protected function registerLoginResponse(): void
        {
            $this->app->singleton(
                \Laravel\Fortify\Contracts\LoginResponse::class,
                CustomLoginResponse::class,
            );
        }
    }
    

    Ahora, cuando un usuario inicie sesión, Fortify utilizará CustomLoginResponse para determinar dónde redirigir en función de su rol. Si el usuario no tiene un rol asignado, se utilizará el valor config('fortify.home') definido en su archivo de configuración fortify.php.

Comments are closed.