API autenticación: Laravel con Sanctum

api

Autenticación de API de Laravel con Sanctum

API — Laravel, creado por Taylor Otwell, es el framework PHP más popular. Pero eso ya lo sabes desde que estás aquí. En las siguientes líneas construiremos un sistema de autenticación usando sanctum.

Usaremos una configuración muy simple en Windows 10. Podríamos considerar XAMPP como la forma más fácil de iniciar un servidor y la mejor parte es que viene con PHP y MySQL. Otro programa que necesita tener instalado es Composer. Este es un administrador de dependencias para PHP. Para realizar solicitudes http puede usar Postman o Insomnia… o lo que prefiera. En esta ocasión usaremos Postman.


Empezando

Comencemos por crear una nueva aplicación de Laravel 8. En su terminal, navegue a la carpeta de proyectos y ejecute:

composer create-project laravel/larave my-awesome-api

Esto creará una nueva carpeta llamada my-awesome-api.

Ahora cd en la carpeta my-awesome-api usando:

cd my-awesome-api

Y sirva la solicitud con:

php artisan serve

api

Ahora, si va a http://127.0.0.1:8000/ en su navegador, debería ver la página de inicio de nuestra aplicación.

api

Esto significa que todo está funcionando bien hasta ahora. Tenga en cuenta que estamos creando un sistema de API, por lo que en el futuro eliminaremos esta página porque no la necesitamos.


El siguiente paso es conectarse a la base de datos. Como mencioné al principio, usaré XAMPP, lo que significa que tenemos una base de datos MySQL. No cubriré la creación de la base de datos aquí.

Vamos a nombrar nuestra base de datos laravel_api. La configuración es muy fácil: simplemente vaya a su archivo .env y asegúrese de que las variables de entorno estén definidas de acuerdo con su configuración.

api

Si todo está bien, podemos ejecutar:

php artisan migrate

Y deberíamos ver algo como esto:

api

Ahora instalemos Sanctum. Esto es muy fácil e implica tres pasos:

1. La instalación real. Esto se hace, como casi todos los paquetes, con Composer, ejecutando el siguiente comando:

composer require laravel/sanctum

2. Publique los archivos de configuración y migración de Sanctum. Logramos esto ejecutando:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Esto colocará un archivo sanctum.php en el directorio de configuración de su aplicación.

3. Ejecutar nuestras migraciones de base de datos. De esta manera Sanctum creará una tabla donde se almacenarán los tokens de API.

php artisan migrate

Antes de comenzar a usar Sanctum, debemos asegurarnos de que el modelo de usuario esté usando el rasgo HasApiTokens. Vaya a app\Models\User.php y agregue el rasgo. Debe tener un aspecto como este:

api

Ahora construyamos la API.

Vi a muchas personas que usaban un solo controlador para toda la parte de autenticación de una aplicación. Personalmente, creo que contraviene el principio de responsabilidad única de SOLID que dice:

 

Una clase solo debe tener una razón para cambiar, lo que significa que solo debe tener una responsabilidad.

 

Un AuthController global tendrá que registrar (lo que significa también almacenar el usuario) iniciar sesión y también cerrar la sesión del usuario. No vamos a hacer esto. En su lugar, crearemos tres controladores dentro de un directorio separado y una clase de servicio para almacenar al usuario.

Controlador de registro

Creemos el controlador de registro de usuario.

php artisan make:controller
Auth/RegisterController

Dentro del directorio de la aplicación creamos otro directorio llamado Servicios. Dentro de este creamos un archivo UserService.php que se ve así:

api

Esta clase manejará el proceso de guardado del usuario. Ahora la clase RegisterController.

api

Aquí inyectamos UserService en nuestro constructor y lo asignamos a nuestra propiedad $userService.

En el método de registro validamos los datos de la solicitud, llamamos al método store desde nuestro UserService, pasando los datos validados de la solicitud. El resultado es un objeto User almacenado en $user. A continuación, creamos el token para el usuario recién guardado, utilizando el método createToken al que se puede acceder desde el rasgo HasApiToken que lo usamos en nuestro modelo de usuario. Luego devolvemos el token como una respuesta json.

Ahora debemos definir la ruta de registro en el archivo routes / api.php de esta manera:

Route::post('/register', [\App\Http\Controllers\Auth\RegisterController::class, 'register']);

Probando el registro con Postman

api

También recomiendo establecer un encabezado Accept: application / json en la sección encabezados para que las descripciones de los errores sean más legibles.

Presione el botón enviar y el resultado debería ser algo como esto:

api

Ahora podemos usar el token para realizar solicitudes que están protegidas por el middleware de autenticación de Sanctum.

Pero antes de eso, hagamos la parte de inicio de sesión.

Generamos el LoginController en el mismo directorio que el RegisterController.

php artisan make:controller
Auth/LoginController

Nuestro controlador se verá así:

api

No se olvide de la ruta:

Route::post('/login', [\App\Http\Controllers\Auth\LoginController::class, 'login']);

Pruebe la solicitud con Postman

api

Ahora tenemos el token y podemos enviarlo como encabezado de Authorization Bearer en futuras llamadas de API.

Tenemos la parte de registro y la de inicio de sesión, pero también tenemos que cerrar la sesión de nuestra aplicación. Construyamos esta parte también.

Primero el controlador:

php artisan make:controller
Auth/LogoutController

api

Como puede ver, este es muy simple. Simplemente obtenemos todos los tokens de los usuarios autenticados y los eliminamos.

Ahora, la ruta para esto debería ser accesible solo si el usuario está conectado. Para lograr esto, definimos nuestra ruta dentro de un grupo con el middleware auth: sanctum.

Route::group(['middleware' => 'auth:sanctum'], function () {
Route::post('/logout', [\App\Http\Controllers\Auth\LogoutController::class, 'logout']);
});

Ahora, si intentamos realizar una solicitud POST en esta ruta, obtenemos el mensaje “No autenticado” con el código 401.

api

Ahora hagamos la misma llamada a la API pero con el encabezado Authorization y el token que obtuvimos de la llamada de inicio de sesión.

api

Recibimos el mensaje “Desconectado” y el estado 200.

Con Postman, puede almacenar el token en una variable de entorno y usarlo para las solicitudes necesarias.


Como puede ver, el paquete Sanctum es muy fácil de instalar y usar. En las publicaciones futuras, crearemos una aplicación Angular simple que consumirá esta API. También ampliaremos esta API y le agregaremos más funciones.

Este es mi primer artículo aquí y sé que mi forma de escribir código (y artículos como este) se puede mejorar. No me odie por usar XAMPP, pero quería que esta configuración se hiciera de la manera más rápida y sencilla posible.

¡Gracias por estar aquí!

Recent Post