Laravel Sanctum: Autenticación de API

laravel sanctum

Autenticación API usando Laravel Sanctum – Laravel 8

Laravel Sanctum


Para los desarrolladores web, es importante para nosotros autenticar a nuestros usuarios a través de una solicitud de API. En Laravel, además de su desarrollo de pila completa, tenemos muchas opciones sobre cómo autenticar las solicitudes. Por ejemplo, tenemos el paquete Laravel Passport para realizar los procesos de autenticación y OAuth. Pero, si no desea utilizar la función OAuth que ofrece Passport, entonces Laravel Sanctum puede ser una opción para usted.

¿Qué es Laravel Sanctum?

 

Laravel Sanctum proporciona un sistema de autenticación ligero para SPA (aplicaciones de una sola página), aplicaciones móviles y API simples basadas en tokens

(https://laravel.com/docs/8.x/sanctum)

 

Sí, en Laravel Sanctum tenemos dos opciones aquí. La primera es la autenticación de token de API y la segunda es la autenticación de SPA. Existe otra autenticación como las aplicaciones móviles, pero esta autenticación tiene un proceso similar al de la autenticación de token de API.

Entonces, la siguiente pregunta es, ¿cuáles son las diferencias entre el token API y la autenticación SPA? La autenticación de token de API utiliza un token que su cliente / front-end debe emitir primero antes de enviar cualquier solicitud al servidor. Su cliente obtiene el token a través de las rutas / login, luego, en cada solicitud siguiente, el token debe incluirse en el encabezado de Authorization (Autorización) como token de Bearer (Portador). Bastante simple, ¿verdad?

La autenticación SPA, por otro lado, no necesita ningún token. En su lugar, utiliza los servicios de autenticación de sesión basados ​​en cookies integrados de Laravel. Cuando usamos este tipo de autenticación, no necesitamos incluir el encabezado Authorization Bearer (Portador de autorización) en cada solicitud. Es útil cuando está construyendo el SPA propio, que su proyecto de front-end puede estar dentro de su proyecto Laravel o en un repositorio / proyecto completamente separado.

Entonces, en este artículo, le mostraré cómo construir la autenticación de token de API usando Laravel Sanctum. Es un proyecto muy simple y, por supuesto, puedes ver el repositorio completo al final de este artículo.

 

Resumen de contenido

  • Instalación de proyecto y santuario
  • Rutas de autenticación
  • ¡Probémoslo!

 

# 1 Instalación de proyectos y Laravel Sanctum

Bien, el primero, creemos un nuevo proyecto de Laravel.

composer create-project laravel/laravel --prefer-dist laravel-sanctum

Después de que la instalación sea exitosa, instale el paquete Laravel Sanctum.

composer require laravel/sanctum

Luego, publique los archivos de configuración y migración de Sanctum. El archivo de configuración de Laravel Sanctum se colocará dentro de su directorio de configuración.

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

A continuación, migre su base de datos. No olvide ajustar la configuración de su base de datos dentro de su archivo .env.

php artisan migrate

Una última cosa, su modelo de usuario necesita usar el rasgo Laravel \ Sanctum \ HasApiTokens, para que podamos emitir el token con el método createToken ().

laravel sanctum

 

# 2 rutas de autenticación

Es hora de la parte importante. Antes de continuar con la creación de rutas de autenticación, es mejor si estamos creando un rasgo de respuesta de API para que podamos devolver una respuesta coherente de una manera sencilla. Creemos un archivo dentro de App \ Traits \ ApiResponser.php. Siéntase libre si desea realizar algún cambio en el rasgo.

laravel sanctum

Primero, comencemos con el andamiaje básico de terminales. Abra su route / api.php y modifíquelo.

laravel sanctum

En las líneas 19 y 20, implementaremos las funciones de registro e inicio de sesión. Y en las líneas 23-28, protegemos las rutas con el middleware “auth: sanctum” para que solo los usuarios autenticados puedan acceder a ellas. En la línea 24, devolvemos un usuario autenticado usando auth () -> usuario ().

Cree un nuevo controlador dentro de App \ Http \ Controllers \ AuthController.php y modifíquelo.

En la función register (), tenemos una lógica muy simple. Primero, validamos la solicitud que envía el cliente, luego creamos un nuevo usuario. Lo último que debemos hacer es enviar un token de API a los clientes. En las líneas 30 y 46 está la forma de cómo podemos crear un token para los usuarios. Necesitamos un parámetro de cadena pasado en la función createToken () que podamos escribir con cualquier cosa. Solo un consejo mío, puede pasar una cadena de parámetros con el nombre del dispositivo, como Iphone12, Macbook, etc.

Para la función logout () en sí, podemos simplemente revocar el token. Entonces, el token no será válido automáticamente si el cliente lo solicitó con el token revocado / eliminado.

 

# 3 ¡Probémoslo!

Primero, intentemos el paso de registro.

laravel sanctum
Imagen 1. Registro

Una vez que el registro se realice correctamente, recibiremos un token. Luego, haremos otra solicitud a / api / me para probar si el punto final devolverá correctamente un usuario autenticado correcto. No olvide que necesita la Authorization (autorización) del encabezado con token de Bearer (portador).

laravel sanctum
Imagen 2. Usuario autenticado

Como puede ver en el resultado anterior, el punto final devuelve un usuario autenticado correcto. Intente eliminar el token o conviértalo en un token no válido para que no se autentique.


Es un tutorial sencillo sobre cómo usamos Sanctum para la autenticación de API. Pero, como sabe, Laravel Sanctum también tiene algunas características, por ejemplo, puedes administrar y asignar habilidades de token fácilmente usando este comando:

return $user->createToken('token-name', ['server:update'])->plainTextToken;

Y verifique las habilidades del token del usuario con:

if ($user->tokenCan('server:update')) {
    //
}

Así es como podemos usar Sanctum para realizar el proceso de autenticación de API. Espero que este artículo pueda ser una buena referencia para usted y ¡hasta la próxima!

Recent Post