Authentication en Strapi

Hasta ahora vimos llamadas a la API agregando el token que creamos en API Tokens. Pero la fuerza de Strapi es que nos permite que nuestros usuarios puedan hacer uso de esta API y que puedan alimentar el sistema con sus propios datos. Sin embargo, no podemos dar a cada usuario nuestro token, porque todo se descontrola, no sabremos quién está haciendo qué. Así que usaremos la Authentication en Strapi para que cada usuario pueda registrarse y hacer uso de la API según los permisos que le asignemos.

Roles de usuario en Strapi

Strapi tiene dos tipo de usuario nada más instalar.

  • Authenticated: este es para realizar ciertas operaciones que en teoría deberían ser privadas, las que necesitan que un usuario se identifique y acceda con un usuario y una contraseña.
  • Public: este tipo de usuario será capaz de realizar algunas operaciones que no necesiten ningún tipo de acceso, como registrar una cuenta, acceder con usuario y contraseña o consultar algunos de nuestros “Content types”. Es como consultar los productos de un eCommerce, donde no deberías ser un usuario registrado para navegar el catálogo de productos.

Para verificar estos roles iremos a Settings >> (USERS & PERMISSIONS PLUGIN) Roles.

roles de usuario en strapi

NOTA: Es posible crear más roles, con permisos granulares de acuerdo a los content types que hayas creado para poder Crear, Leer, Actualizar o Borrar. Por ahora usaremos los que vienen por default.

Public

Con este roles, prácticamente nos vamos a poder registrar como un usuario y para este post, precisamente es lo que necesitamos.

¿Pero para qué más nos sirve?

Un caso de uso muy común es un ecommerce. Por default necesitamos que se puedan consultar los productos por cualquier persona que entre al sitio y que pueda acceder a otro tipo de contenido, como la página de nosotros o la de contacto.

Para el ejemplo que hemos estaba revisando en esta serie de posts, vamos a activar los permisos para nuestro Content Type “Productos“.

roles de usuario en strapi

Ubicamos la sección de Producto y dentro seleccionamos find y findOne y luego guardamos.

Luego hacemos un request a nuestro Strapi desde la consola. Recuerda que igual lo puedes hacer en Insomnia o Postman:

curl -X GET \
--no-progress-meter \
http://localhost:1337/api/productos | jq .
lista de productos

Ahora vemos la respuesta exitosa, pero si desactivamos estas casillas dentro de “Producto”, la respuesta sería la siguiente:

acceso prohibido

El error HTTP 403 se hará presente y no nos dejará consultar información.

Authenticated

Como ya mencionamos, este tipo de rol es usado para realizar operaciones en las que necesitemos que el usuario pueda estar registrado. Siguiendo el ejemplo del eCommerce, sería para registrar su compra o guardar sus productos favoritos o diferentes direcciones.

Para usar este usuario, primero debe estar creado. En este post veremos cómo crear uno haciendo un request al endpoint de register.

Crear un usuario

Hasta ahora solo tenemos el usuario de Strapi, que pertenece al grupo de usuarios que gestionan el CMS, no los que pueden ingresar através de los endpoints dispuestos para usar el verdadero poder de un Headless CMS.

users strapi admin panel

Por otro lado, tenemos los usuarios que se encargarán de gestionar los datos de la operación o negocio, que al principio, obviamente es una lista vacía.

lista de usuarios en strapi

Registrar un usuario mediante la API

Veamos cómo usar el endpoint /api/auth/local/register para registrar nuestro usuario.

curl -X POST \
--no-progress-meter \
http://localhost:1337/api/auth/local/register \
-H 'Content-Type: application/json' \
-d '{"username": "usuario1", "email": "[email protected]", "password": "pass123"}' | jq .
jwt en strapi

Esto es como enviar un request con axios de Javascript o restify en Go.

usuarios en strapi

Si vamos a revisar nuestros usuario, veremos que ahora ya aparece en la lista el usuario “usuario1”.

Authentication en Strapi

Una vez que el usuario ha sido registrado, ya podemos iniciar sesión:

curl -X POST \
--no-progress-meter \
http://localhost:1337/api/auth/local \
-H 'Content-Type: application/json' \
-d '{"identifier": "[email protected]", "password": "pass123"}' | jq .
jwt en strapi

JTW en Strapi

Si el usuario y la contraseña han sido enviados correctamente, Strapi nos devolverá un JWT.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NCwiaWF0IjoxNzExNzI4ODc0LCJleHAiOjE3MTQzMjA4NzR9._Q885CenQPFhXvp-RVqdoxz7PDSW43ELmpS5v90ppv0

Este JWT lo usaremos para llamadas posteriores y en el siguiente post donde haremos un CRUD y revisaremos cómo usar la API con un usuario autenticado.

Si vemos los claims del JWT:

echo "eyJpZCI6NCwiaWF0IjoxNzExNzI4ODc0LCJleHAiOjE3MTQzMjA4NzR9" | base64 -d | jq .

El resultado es:

{
  "id": 4,
  "iat": 1711728874,
  "exp": 1714320874
}

Vemos que nos regresa el id del usuario. De esta forma Strapi toma el usuario y registra sus movimientos.

Puedes ver más acá sobre Authentication en Strapi.

Gracias por leer.


Posted

in

, , , , , , ,

by