Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
20/04/2025, by Ivan

Кратко

JSON:API работает исключительно с сущностями. Он не обрабатывает бизнес-логику и не заменяет такие действия, как регистрация, вход или сброс пароля.

Всё это реализуется через другие механизмы, в том числе REST-ресурсы из ядра Drupal.

Полезные пути:

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

Получение токена сессии

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

Ответ: токен в формате plain text.

Использование токенов

При входе вы получаете csrf_token и logout_token. Один из них требуется для запросов POST, PATCH, DELETE.

Регистрация пользователя

JSON:API не поддерживает регистрацию. Используйте модуль JSON:API User Resources или ядро REST.

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

Ответ включает UUID нового пользователя:

{
  "uuid": [ { "value": "3e75b757-831e..." } ]
}

Вход в систему

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

Ответ содержит токены и информацию о пользователе:

{
  "csrf_token": "...",
  "logout_token": "...",
  "current_user": {
    "roles": ["authenticated", "administrator"],
    "name": "admin",
    "uid": "1"
  }
}

Статус пользователя

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

Ответ: 1 если пользователь авторизован, 0 — нет.

Выход

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

Токен logout передаётся как параметр token.

Аутентификация

Примеры выше используют cookie. Также доступны:

SameSite: None для cookie

Если JS-приложение и Drupal имеют разные домены, измените настройку SameSite:

parameters:
  session.storage.options:
    cookie_samesite: None

REST UI

Модуль REST UI позволяет настраивать REST-ресурсы через интерфейс:

  1. Включите ресурс "User registration" на странице /admin/config/services/rest.
  2. Разрешите "Access POST on User registration resource" для Anonymous на /admin/people/permissions/module/rest.
  3. Убедитесь, что на /admin/config/people/accounts разрешена регистрация.

Статья с сайта Drupal Documentation.