Laravel

Laravel

Tutorial Laravel: Sistema de autenticación nativo Laravel

Descubre cómo implementar un sistema de autenticación robusto y seguro en aplicaciones web con Laravel, usando herramientas modernas como Laravel Breeze.

Aprende Laravel GRATIS y certifícate

Introducción al sistema de autenticación

En el desarrollo de aplicaciones web, la autenticación es un componente esencial para controlar el acceso de los usuarios y proteger información sensible. Laravel, reconociendo esta necesidad, proporciona un sistema de autenticación nativo que simplifica la implementación de funcionalidades de inicio de sesión, registro y gestión de usuarios.

El sistema de autenticación de Laravel viene integrado con una serie de herramientas y características que permiten a los desarrolladores añadir autenticación de manera rápida y segura. Entre estas herramientas se encuentran rutas predefinidas, controladores y vistas que manejan las operaciones más comunes, como el registro de nuevos usuarios, el inicio de sesión y el restablecimiento de contraseñas.

Una de las ventajas clave del sistema nativo es su flexibilidad. Aunque Laravel ofrece una estructura predeterminada, los desarrolladores pueden personalizarla según las necesidades específicas de su aplicación. Esto incluye la posibilidad de modificar las vistas utilizando el motor de plantillas Blade, ajustar los controladores o incluso definir nuevos guards para manejar diferentes métodos de autenticación.

Además, el sistema de autenticación de Laravel está diseñado para trabajar de manera armoniosa con otros componentes del framework. Por ejemplo, se integra fácilmente con los middlewares, permitiendo restringir el acceso a ciertas rutas únicamente a usuarios autenticados. También funciona en conjunto con el sistema de autorización, facilitando la implementación de políticas y gates para el control de permisos y roles de usuario.

Es importante destacar que Laravel sigue las mejores prácticas de seguridad, incorporando medidas como el hashing de contraseñas y la protección contra ataques CSRF. Esto garantiza que las credenciales de los usuarios se manejen de forma segura y que la aplicación esté protegida contra vulnerabilidades comunes.

Configuración de rutas y controladores de autenticación

Para implementar la autenticación en una aplicación Laravel, es esencial configurar correctamente las rutas y los controladores que gestionarán las solicitudes de los usuarios. Laravel proporciona herramientas modernas, como Laravel Breeze, que facilitan este proceso al ofrecer un andamiaje simple y personalizable para la autenticación.

Instalación de Laravel Breeze

Primero, instalamos Laravel Breeze mediante Composer:

composer require laravel/breeze --dev

Después de la instalación, ejecutamos el instalador de Breeze:

php artisan breeze:install

Este comando genera las rutas, controladores y vistas necesarias para el sistema de autenticación. Además, instala las dependencias de frontend si estamos utilizando un framework JavaScript como React o Vue.

Migración de la base de datos

Antes de continuar, es crucial ejecutar las migraciones para crear las tablas requeridas en la base de datos:

php artisan migrate

Este comando crea tablas como users, password_resets, personal_access_tokens, entre otras, que son fundamentales para el manejo de usuarios y sesiones.

Configuración de rutas de autenticación

Las rutas generadas por Laravel Breeze se ubican en el archivo routes/auth.php. Este archivo es incluido en routes/web.php mediante:

require __DIR__.'/auth.php';

Las rutas de autenticación incluyen rutas para:

  • Registro (/register)
  • Inicio de sesión (/login)
  • Restablecimiento de contraseña (/forgot-password, /reset-password)
  • Verificación de correo electrónico (/verify-email)
  • Confirmación de contraseña (/confirm-password)
  • Cierre de sesión (/logout)

Un ejemplo de ruta de inicio de sesión es:

Route::get('/login', [AuthenticatedSessionController::class, 'create'])
    ->middleware('guest')
    ->name('login');

Route::post('/login', [AuthenticatedSessionController::class, 'store'])
    ->middleware('guest');

Estas rutas utilizan el middleware guest para asegurar que solo los usuarios no autenticados puedan acceder a ellas.

Controladores de autenticación

Los controladores encargados de manejar la lógica de autenticación se encuentran en app/Http/Controllers/Auth. Algunos de los controladores clave son:

  • RegisteredUserController: gestiona el registro de nuevos usuarios.
  • AuthenticatedSessionController: maneja el inicio y cierre de sesión.
  • PasswordResetLinkController y NewPasswordController: administran el restablecimiento de contraseñas.
  • EmailVerificationNotificationController y VerifyEmailController: manejan la verificación de direcciones de correo electrónico.
  • ConfirmablePasswordController: gestiona la confirmación de contraseñas para acciones sensibles.

Cada controlador contiene métodos que procesan las solicitudes entrantes, validan datos y redirigen al usuario según sea necesario. Por ejemplo, el método store en AuthenticatedSessionController se encarga de autenticar al usuario:

public function store(Request $request)
{
    $request->validate([
        'email' => ['required', 'string', 'email'],
        'password' => ['required', 'string'],
    ]);

    if (! Auth::attempt($request->only('email', 'password'), $request->boolean('remember'))) {
        return back()->withErrors([
            'email' => __('Las credenciales proporcionadas no coinciden con nuestros registros.'),
        ])->onlyInput('email');
    }

    $request->session()->regenerate();

    return redirect()->intended(RouteServiceProvider::HOME);
}

Este método valida las credenciales, intenta autenticar al usuario y regenera la sesión para proteger contra ataques de fijación de sesión.

Personalización de rutas y controladores

Laravel ofrece flexibilidad para personalizar tanto las rutas como los controladores de autenticación. Si necesitamos cambiar la URL de inicio de sesión, podemos modificar la ruta en routes/auth.php:

Route::get('/acceso', [AuthenticatedSessionController::class, 'create'])
    ->middleware('guest')
    ->name('login');

También podemos añadir lógica adicional en los controladores. Por ejemplo, para registrar información adicional del usuario durante el registro, podemos modificar el método store en RegisteredUserController:

public function store(Request $request)
{
    $request->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'phone' => ['required', 'string', 'max:15'],
        'password' => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'phone' => $request->phone,
        'password' => Hash::make($request->password),
    ]);

    Auth::login($user);

    return redirect(RouteServiceProvider::HOME);
}

En este ejemplo, se ha añadido el campo phone para capturar el número de teléfono del usuario durante el registro.

Middleware de autenticación

Para proteger rutas y garantizar que solo usuarios autenticados puedan acceder a ciertas partes de la aplicación, aplicamos el middleware auth. Por ejemplo, en routes/web.php:

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

El middleware verified asegura que el usuario haya verificado su dirección de correo electrónico antes de acceder al dashboard.

Configuración de redirecciones

Las redirecciones predeterminadas después del inicio de sesión o registro se definen en app/Providers/RouteServiceProvider.php mediante la constante HOME:

public const HOME = '/dashboard';

Si deseamos cambiar la ruta de redirección, simplemente ajustamos este valor.

Configuración adicional

Es posible que necesitemos ajustar la configuración en config/auth.php. Por ejemplo, si trabajamos con múltiples proveedores de usuarios o modificamos los guardias de autenticación.

Además, para personalizar los mensajes de validación y errores, podemos editar los archivos de localización en resources/lang.

Vistas de inicio de sesión y registro

Las vistas de inicio de sesión y registro son componentes esenciales en aplicaciones que requieren autenticación de usuarios. En Laravel, estas vistas se generan automáticamente al instalar herramientas como Laravel Breeze, proporcionando una interfaz funcional que puede adaptarse a las necesidades de la aplicación.

Las vistas generadas utilizan el motor de plantillas Blade, lo que permite una personalización sencilla y eficiente. Se almacenan en el directorio resources/views/auth, incluyendo archivos como login.blade.php y register.blade.php.

Para modificar el aspecto o contenido de estas vistas, es posible editar directamente los archivos Blade. Por ejemplo, para añadir un campo adicional al formulario de registro, como el número de teléfono, se puede editar register.blade.php y agregar el siguiente código:

<div>
    <label for="phone">Número de teléfono</label>
    <input id="phone" type="text" name="phone" required>
</div>

Es fundamental que cualquier campo añadido en las vistas sea manejado correctamente en los controladores y validado en el servidor.

Laravel fomenta el uso de layouts para mantener un diseño consistente en toda la aplicación. Las vistas de autenticación suelen extender un layout base, como layouts.app, utilizando la directiva @extends:

@extends('layouts.app')

@section('content')
    <!-- Contenido específico de la vista -->
@endsection

Esto permite definir secciones específicas con @section y @yield, facilitando la organización del contenido y la reutilización de código.

Las directivas Blade simplifican el código en las vistas, haciéndolo más legible y mantenible. Por ejemplo, la directiva @csrf se utiliza para incluir el token CSRF en los formularios, protegiendo contra ataques de falsificación de solicitudes:

<form method="POST" action="{{ route('login') }}">
    @csrf
    <!-- Campos del formulario -->
</form>

Para mostrar mensajes de error y validar la entrada del usuario, se pueden utilizar directivas como @error:

@error('email')
    <span>{{ $message }}</span>
@enderror

Las vistas de autenticación suelen incluir enlaces a otras partes del sistema, como la opción de registrarse o restablecer la contraseña. Para generar estos enlaces de manera dinámica y segura, se utilizan funciones como route:

<a href="{{ route('password.request') }}">¿Olvidaste tu contraseña?</a>

Esto garantiza que los enlaces correspondan a las rutas adecuadas, facilitando el mantenimiento y evitando errores al cambiar las URL.

Es posible personalizar el diseño y los estilos de las vistas para que coincidan con la identidad visual de la aplicación. Se pueden agregar clases CSS a los elementos o integrar frameworks de interfaz de usuario como Tailwind CSS o Bootstrap. Por ejemplo, para aplicar estilos con Tailwind CSS:

<input id="email" type="email" name="email" required class="mt-1 block w-full">

Aunque es beneficioso implementar validación en el lado del cliente mediante JavaScript para mejorar la experiencia del usuario, es esencial mantener la validación en el servidor para garantizar la seguridad y la integridad de los datos.

Laravel facilita la creación de aplicaciones multilingües mediante archivos de localización. En las vistas, en lugar de utilizar textos estáticos, se pueden emplear funciones de traducción:

<label for="email">{{ __('Dirección de correo electrónico') }}</label>

De esta manera, se soportan múltiples idiomas sin necesidad de modificar las vistas, lo que simplifica la internacionalización.

Gestionar adecuadamente los mensajes de error y de estado en las vistas es crucial para proporcionar una buena experiencia al usuario. Laravel utiliza flash sessions para almacenar mensajes temporales que se muestran una vez:

@if (session('status'))
    <div>
        {{ session('status') }}
    </div>
@endif

Esto es útil para informar al usuario sobre acciones como el envío de un enlace de restablecimiento de contraseña o la confirmación de una operación.

La accesibilidad y la usabilidad son aspectos importantes a considerar al diseñar las vistas de inicio de sesión y registro. Se deben seguir buenas prácticas, como utilizar etiquetas label para los campos de formulario, asegurar que el contenido sea responsive y que los elementos interactivos sean accesibles mediante el teclado.

Para garantizar que las vistas funcionan correctamente, es recomendable realizar pruebas tanto manuales como automatizadas. Esto incluye verificar que los formularios envían los datos correctos, que los mensajes de error se muestran adecuadamente y que la validación se comporta como se espera.

Redirecciones y middlewares

En Laravel, la gestión de redirecciones y el uso de middlewares son fundamentales para controlar el flujo de la aplicación y proteger las rutas según el estado de autenticación del usuario. Después de implementar el sistema de autenticación nativo, es necesario configurar adecuadamente estas herramientas para ofrecer una experiencia coherente y segura.

Redirecciones después de la autenticación

Por defecto, Laravel redirige a los usuarios autenticados a la ruta definida en RouteServiceProvider.php, mediante la constante HOME:

public const HOME = '/dashboard';

Si se desea cambiar la ruta de redirección tras el inicio de sesión, basta con modificar este valor. Por ejemplo, para redirigir al usuario a la página principal:

public const HOME = '/';

Además, es posible personalizar las redirecciones en los controladores de autenticación. En el método store del AuthenticatedSessionController, se utiliza la función redirect()->intended() para dirigir al usuario a su destino previsto o, en su defecto, a la ruta por defecto:

return redirect()->intended(RouteServiceProvider::HOME);

Si se requiere una lógica más compleja, como redirigir a diferentes rutas según el rol del usuario, se puede implementar de la siguiente manera:

if ($user->isAdmin()) {
    return redirect()->route('admin.dashboard');
}

return redirect()->intended(RouteServiceProvider::HOME);

Redirecciones personalizadas tras el registro y el logout

Del mismo modo, se pueden modificar las redirecciones después del registro o al cerrar sesión. En el RegisteredUserController, tras crear y autenticar al nuevo usuario:

return redirect(RouteServiceProvider::HOME);

Para cambiar esta ruta, se puede sustituir por otra según las necesidades:

return redirect()->route('welcome');

Al cerrar sesión, en el AuthenticatedSessionController, tras invalidar la sesión, se redirige al usuario:

return redirect('/');

Esta ruta puede ajustarse para dirigir al usuario a una página específica tras el logout.

Uso de middlewares para protección de rutas

Los middlewares en Laravel actúan como capas intermedias que filtran las solicitudes antes de que lleguen a los controladores. El middleware auth es esencial para proteger rutas que deben ser accesibles solo por usuarios autenticados.

Para aplicar este middleware a una ruta o grupo de rutas, se utiliza el método middleware():

Route::get('/dashboard', function () {
    // Contenido protegido
})->middleware('auth');

También es posible definir un grupo de rutas que comparten el mismo middleware:

Route::middleware(['auth'])->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit']);
    Route::post('/profile', [ProfileController::class, 'update']);
});

El middleware guest se utiliza para restringir el acceso a usuarios no autenticados, como en las rutas de inicio de sesión y registro:

Route::get('/login', [AuthenticatedSessionController::class, 'create'])
    ->middleware('guest');

Middlewares de verificación de email

Para asegurar que solo usuarios con el correo verificado puedan acceder a ciertas rutas, se aplica el middleware verified:

Route::get('/settings', function () {
    // Configuración del usuario
})->middleware(['auth', 'verified']);

Este middleware comprueba que el campo email_verified_at del usuario esté establecido. Si no es así, Laravel redirige al usuario a la ruta de verificación de correo.

Creación de middlewares personalizados

En ocasiones, es necesario crear middlewares personalizados para satisfacer requisitos específicos. Para generar un middleware, se utiliza el comando Artisan:

php artisan make:middleware CheckRole

Esto crea un archivo en app/Http/Middleware/CheckRole.php. En este middleware, se puede implementar lógica para verificar el rol del usuario:

public function handle($request, Closure $next, $role)
{
    if (! $request->user()->hasRole($role)) {
        abort(403, 'Acceso prohibido');
    }

    return $next($request);
}

Luego, se registra el middleware en app/Http/Kernel.php, en el arreglo $routeMiddleware:

protected $routeMiddleware = [
    // ...
    'role' => \App\Http\Middleware\CheckRole::class,
];

Ahora, el middleware se puede aplicar a rutas, pasando el rol como parámetro:

Route::get('/admin', function () {
    // Área de administración
})->middleware(['auth', 'role:admin']);

Redirecciones en middlewares personalizados

Un middleware personalizado puede gestionar redirecciones si una condición no se cumple. Por ejemplo, redirigir a una página de error o a una ruta específica:

public function handle($request, Closure $next)
{
    if ($request->user()->isBanned()) {
        return redirect()->route('banned');
    }

    return $next($request);
}

En este caso, si el usuario está baneado, será redirigido a la ruta banned.

Middleware Authenticate y personalización

El middleware Authenticate es el encargado de redirigir a los usuarios no autenticados. Por defecto, redirige a la ruta login. Si se desea modificar esta ruta, se puede ajustar el método redirectTo en el middleware:

protected function redirectTo($request)
{
    if (! $request->expectsJson()) {
        return route('acceso');
    }
}

Esto es útil si la aplicación utiliza una ruta de inicio de sesión personalizada.

Aplicación global de middlewares

Los middlewares pueden aplicarse de manera global a todas las rutas de la aplicación. Para ello, se añaden al arreglo $middleware en app/Http/Kernel.php:

protected $middleware = [
    // ...
    \App\Http\Middleware\CheckMaintenanceMode::class,
];

Este middleware se ejecutará en cada solicitud, permitiendo implementar funcionalidades como un modo de mantenimiento personalizado.

Prioridad y orden de los middlewares

El orden en que se ejecutan los middlewares puede ser importante, especialmente si uno depende de las acciones de otro. Laravel permite definir la prioridad de ejecución en el arreglo $middlewarePriority del Kernel:

protected $middlewarePriority = [
    \App\Http\Middleware\Authenticate::class,
    \App\Http\Middleware\CheckRole::class,
    // Otros middlewares
];

Esto asegura que el middleware de autenticación se ejecute antes que el de verificación de roles.

Middlewares y autenticación en APIs

Para proteger rutas de una API, se utiliza el guard api y el middleware auth:api. En el archivo routes/api.php:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Esto asegura que solo solicitudes autenticadas mediante tokens de API puedan acceder a estas rutas.

Uso de middlewares en controladores

Además de aplicarlos en rutas, es posible utilizar middlewares directamente en controladores. Esto se hace mediante el método middleware() en el constructor:

class ProfileController extends Controller
{
    public function __construct()
    {
        $this->middleware(['auth', 'verified']);
    }

    // Métodos del controlador
}

De esta forma, todos los métodos del controlador estarán protegidos por los middlewares especificados.

Middlewares y manejo de excepciones

Si un middleware lanza una excepción, Laravel la manejará según la configuración de la aplicación. Por ejemplo, si un middleware llama a abort(403), se mostrará una página de error 403. Es importante proporcionar mensajes de error claros y, si es necesario, personalizar las vistas de error en resources/views/errors.

Con una correcta configuración de las redirecciones y los middlewares, se logra un control efectivo sobre quién accede a cada parte de la aplicación, manteniendo altos estándares de seguridad y ofreciendo una experiencia de usuario fluida.

Debugging y resolución de errores comunes

Al implementar el sistema de autenticación nativo de Laravel, es posible encontrarse con diversos errores y desafíos que pueden obstaculizar el correcto funcionamiento de la aplicación. A continuación, se describen algunos de los problemas más comunes y se ofrecen soluciones prácticas para depurarlos y resolverlos eficazmente.

Error de credenciales incorrectas pese a ser válidas

Es frecuente que, al intentar iniciar sesión con credenciales correctas, el sistema responda con un mensaje de error indicando que son incorrectas. Este problema puede deberse a que las contraseñas almacenadas no están hasheadas correctamente.

Solución:

  • Asegurarse de que, al registrar usuarios, las contraseñas se estén almacenando utilizando el método Hash::make(). Por ejemplo:
use Illuminate\Support\Facades\Hash;

// ...

$user = User::create([
    'name' => $request->name,
    'email' => $request->email,
    'password' => Hash::make($request->password),
]);
  • Verificar que en el método de autenticación se utiliza Auth::attempt() sin manipular la contraseña directamente.

Token CSRF inválido o falta de token

Al enviar formularios, puede aparecer un error de tipo "TokenMismatchException", indicando que el token CSRF es inválido o no está presente.

Solución:

  • Asegurarse de incluir la directiva @csrf dentro de los formularios en las vistas Blade:
<form method="POST" action="{{ route('login') }}">
    @csrf
    <!-- Campos del formulario -->
</form>
  • Comprobar que el método del formulario es POST y que la ruta correspondiente acepta solicitudes POST.

Redirección en bucle al iniciar sesión

Cuando un usuario intenta acceder a una ruta protegida sin estar autenticado, es posible que se produzca un bucle de redirecciones entre la ruta protegida y la de inicio de sesión.

Causas comunes:

  • El middleware auth podría estar mal configurado.
  • La ruta de inicio de sesión podría estar protegida por el middleware auth, impidiendo el acceso a usuarios invitados.

Solución:

  • Verificar que las rutas de autenticación (/login, /register, etc.) utilizan el middleware guest y no el middleware auth:
Route::get('/login', [AuthenticatedSessionController::class, 'create'])
    ->middleware('guest')
    ->name('login');
  • Asegurarse de que las rutas protegidas aplican correctamente el middleware auth y que las rutas de inicio de sesión están excluidas.

Error 419 al enviar formularios

El error 419 Page Expired suele estar relacionado con problemas en la verificación del token CSRF.

Solución:

Confirmar que el token CSRF se incluye en todos los formularios mediante @csrf.

Comprobar que la sesión está activa y que no ha expirado. Si se están realizando pruebas con múltiples pestañas o navegadores, la sesión podría quedar invalidada.

Verificar que la configuración de dominio y subdominio en config/session.php es correcta, especialmente el campo domain.

Fallo en la validación de formularios sin mostrar errores

Puede ocurrir que, al enviar un formulario con datos incorrectos, la validación falle pero no se muestren los mensajes de error correspondientes en la vista.

Solución:

  • En la vista Blade, asegurarse de que se están mostrando los errores utilizando la variable $errors:
@if ($errors->any())
<div>
    <ul>
        @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif
  • Verificar que en el controlador se realiza la validación y se redirige correctamente en caso de error:
$request->validate([
    'email' => 'required|email',
    'password' => 'required',
]);

Usuario no autenticado después de iniciar sesión

Tras enviar el formulario de inicio de sesión, el usuario no permanece autenticado y se comporta como si no hubiera iniciado sesión.

Solución:

  • Asegurarse de que se está llamando al método Auth::attempt() correctamente y que éste devuelve true:
if (Auth::attempt($credentials)) {
    $request->session()->regenerate();
    return redirect()->intended('dashboard');
}

Confirmar que la sesión se está regenerando tras la autenticación para prevenir ataques de fijación de sesión.

Verificar que el middleware de sesión está habilitado en app/Http/Kernel.php:

protected $middlewareGroups = [
    'web' => [
        // ...
        \Illuminate\Session\Middleware\StartSession::class,
        // ...
    ],
];

Excepción de migración o tablas no encontradas

Al ejecutar la aplicación, puede aparecer un error indicando que una tabla no existe en la base de datos.

Solución:

  • Ejecutar las migraciones para crear las tablas necesarias:
php artisan migrate
  • Comprobar que la conexión a la base de datos está correctamente configurada en el archivo .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nombre_base_datos
DB_USERNAME=usuario
DB_PASSWORD=contraseña
  • Verificar que la extensión PDO está habilitada en la configuración de PHP.

Error "Route [login] not defined"

Este error ocurre cuando se intenta redirigir a una ruta inexistente llamada login.

Solución:

  • Asegurarse de que las rutas de autenticación están definidas y que el nombre de la ruta es correcto:
Route::get('/login', [AuthenticatedSessionController::class, 'create'])
    ->middleware('guest')
    ->name('login');
  • Si se ha personalizado el nombre de la ruta, actualizar las referencias correspondientes en el middleware Authenticate o en las redirecciones.

Problemas con la verificación de correo electrónico

Los usuarios no reciben el correo de verificación o el enlace no funciona correctamente.

Solución:

  • Configurar correctamente el servicio de envío de correos en el archivo .env:
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=usuario@example.com
MAIL_PASSWORD=contraseña
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=no-reply@example.com
MAIL_FROM_NAME="Nombre de la Aplicación"
  • Verificar que el controlador está enviando el correo de verificación:
$user->sendEmailVerificationNotification();
  • Comprobar que la cola de trabajos está funcionando si se utiliza el sistema de colas para enviar correos.

Excepciones no capturadas y depuración

Al encontrar errores no específicos, es útil activar el modo de depuración para obtener información detallada.

Solución:

  • En el archivo .env, establecer APP_DEBUG a true:
APP_DEBUG=true
  • Utilizar la función dd() o dump() para inspeccionar variables y objetos en puntos clave del código:
dd($variable);
  • Revisar los registros de errores en storage/logs/laravel.log para obtener más detalles sobre las excepciones.

Error "Unauthenticated" al acceder a rutas API

Al consumir una API protegida, se recibe un error de autenticación incluso después de enviar el token correcto.

Solución:

  • Asegurarse de que el token de autenticación se envía en la cabecera Authorization:
Authorization: Bearer {token}
  • Verificar que el guardia de autenticación para las rutas API está configurado correctamente en config/auth.php:
'guards' => [
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],
  • Comprobar que las rutas están protegidas con el middleware auth:api.

Problemas con el caché de rutas y configuraciones

Cambios recientes en rutas o configuraciones no parecen tener efecto en la aplicación.

Solución:

  • Limpiar el caché de la aplicación para asegurarse de que se están utilizando las versiones más recientes:
php artisan route:clear
php artisan config:clear
php artisan cache:clear
  • Si se está utilizando el caché de rutas en producción, volver a compilarlo:
php artisan route:cache

Uso del servidor web integrado de PHP

Al ejecutar la aplicación con php -S localhost:8000, puede haber problemas relacionados con la gestión de rutas.

Solución:

  • Especificar el directorio público al iniciar el servidor integrado:
php -S localhost:8000 -t public
  • Asegurarse de que el directorio de trabajo es el raíz del proyecto Laravel y que se está sirviendo la carpeta public.

Mensajes de error personalizados y localización

Los mensajes de error pueden aparecer en inglés o no reflejar el formato deseado.

Solución:

  • Configurar el idioma predeterminado de la aplicación en config/app.php:
'locale' => env('APP_LOCALE', 'es'),

'fallback_locale' => env('APP_FALLBACK_LOCALE', 'es'),

'faker_locale' => env('APP_FAKER_LOCALE', 'es_ES'),

Editar y personalizar los archivos de localización en resources/lang/es, especialmente los relacionados con la validación y autenticación.

Utilizar la función __('mensaje') en las vistas y controladores para asegurar la compatibilidad con la localización.

Mediante la identificación y solución de estos errores comunes, se puede garantizar un funcionamiento óptimo del sistema de autenticación en Laravel. La atención al detalle y el uso efectivo de las herramientas de depuración son clave para resolver los problemas que puedan surgir durante el desarrollo.

Para seguir leyendo hazte Plus

¿Ya eres Plus? Accede a la app

Plan mensual

19.00 € /mes

Precio normal mensual: 19 €
47 % DE DESCUENTO

Plan anual

10.00 € /mes

Ahorras 108 € al año
Precio normal anual: 120 €
Aprende Laravel GRATIS online

Todas las lecciones de Laravel

Accede a todas las lecciones de Laravel y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Laravel y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender la importancia de la autenticación en aplicaciones web
  • Instalar y configurar Larave Breeze para la autenticación
  • Definir rutas y controladores de autenticación
  • Personalizar formularios y vistas con Blade
  • Implementar middleware para proteger rutas
  • Manejar y solucionar errores comunes en la autenticación
  • Configurar redirecciones y mensajes de error adecuados