logo

Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll
18/05/2025, by Ivan

JSON:API es completamente basado en entidades. Es decir, no puede procesar reglas de negocio ni realizar acciones que no puedan considerarse como "CRUD". La lógica de negocio, como registrar una nueva cuenta, iniciar sesión de usuario o solicitar una nueva contraseña, no forma parte de JSON:API. Muchas de estas funcionalidades ya están provistas por el núcleo de Drupal.

A continuación se presenta una lista no exhaustiva de necesidades comunes y sus soluciones.

Las rutas de interés son:

  • /session/token
  • /user/register
  • /user/login
  • /user/login_status
  • /user/logout

Obtener un token de sesión

Obtener un token

curl \
  --request GET http://drupal.d8/session/token

El token se devuelve como texto plano (no JSON) en el cuerpo de la respuesta.

Uso de tokens

Además del token de sesión, al iniciar sesión también se obtiene un csrf_token y un logout_token. Necesitarás el logout_token para cerrar la sesión del usuario (ver más abajo). El csrf_token o el token de sesión es necesario para peticiones mutables (por ejemplo, POST, PATCH y DELETE).

Registro de usuario

Mientras que JSON:API provisto por el núcleo no admite el registro de nuevos usuarios, puedes instalar el módulo JSON:API User Resources para añadir endpoints JSON:API relacionados con usuarios, incluidos endpoints para registro, restablecimiento y actualización de contraseña.

Alternativamente, puedes usar el módulo REST del núcleo. Para permitir a los usuarios registrar una cuenta vía REST, debe habilitarse el recurso REST user_registration (consulta el ejemplo de REST UI más abajo).

curl \
--header "Content-Type: application/json" \
--header "X-CSRF-Token: 57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ" \
--request POST "https://drupal.d9/user/register?_format=json" \
--data '{"name": {"value": "thename123"}, "pass": {"value": "thepass"}, "mail": {"value": "someone@example.com"}}'

Usa el valor del token de sesión con el encabezado X-CSRF-Token. Una respuesta exitosa debe contener algunos campos de usuario, incluido el UUID del nuevo usuario creado:

{
   "uuid" : [ { "value" : "3e75b757-831e-4bf7-bbb6-25b8c50c7ac0" } ]
}

También observa que la respuesta no incluye cabeceras "Set-Cookie", incluso si los visitantes pueden crear una cuenta por sí mismos. Así que, si no se requiere aprobación o confirmación, puedes iniciar sesión después del registro exitoso usando el mismo nombre y contraseña.

Inicio de sesión de usuario

curl \
  --header "Content-type: application/json" \
  -c cookie.txt \
  --request POST "http://drupal.d8/user/login?_format=json" \
  --data '{"name":"admin", "pass":"admin"}'

La opción -c cookie.txt le indica a curl guardar una cookie. La respuesta debería verse algo así:

{
   "csrf_token" : "57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ",
   "logout_token" : "zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw",
   "current_user" : {
      "roles" : [
         "authenticated",
         "administrator"
      ],
      "name" : "admin",
      "uid" : "1"
   }
}

Estado del usuario

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request GET "http://drupal.d8/user/login_status?_format=json"

-b cookie.txt le indica a curl enviar (no guardar) la cookie de la última petición. Si estás autenticado, esto devolverá 1 en el cuerpo de la respuesta en texto plano (no JSON), en caso contrario, 0.

Cerrar sesión de usuario

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request POST "http://drupal.d8/user/logout?_format=json&token=zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw"

Esto cerrará la sesión del usuario autenticado mediante cookie.txt. Usa el valor de logout_token con el parámetro token en la URL.

Mecanismos de autenticación

El ejemplo anterior es solo uno de los muchos mecanismos de autenticación disponibles. Debes explorar cuál mecanismo es el mejor para tus necesidades.

Un módulo OAuth para Drupal está disponible como simple_oauth.

Referencias

Consulta estos registros de cambios para más información:

Para autenticación, también puedes considerar usar otros protocolos de autenticación.

Si decides utilizar cookies para autenticar tu aplicación JavaScript frontend con un backend Drupal, el navegador puede encargarse de almacenar las cookies de sesión. Solo recuerda que si tu aplicación JS y el sitio Drupal tienen diferentes dominios, debes permitir que los navegadores almacenen las cookies de sesión de usuario cambiando el parámetro SameSite de la cookie a "None". Para esto, edita tu archivo services.yml y añade el siguiente parámetro:

parameters:
  session.storage.options:
    cookie_samesite: None

REST UI

El módulo REST UI contrib permite configurar los recursos del módulo REST del núcleo. Veamos cómo habilitar el registro de usuario con este módulo.

  1. Después de instalar y habilitar el módulo REST UI, ve a la página de configuración en /admin/config/services/rest y habilita el recurso "User registration". Edita el recurso y habilita el método POST, formato JSON y el proveedor Cookie, por ejemplo. Cambiar la granularidad a "método" también te permite separar formatos y proveedores por método de solicitud.
  2. Luego, otorga permiso a los usuarios anónimos para "Access POST on User registration resource" en /admin/people/permissions/module/rest.
  3. Finalmente, asegúrate de que los visitantes puedan crear una cuenta en /admin/config/people/accounts.

 

Artículo extraído de Drupal Documentation.