Чего JSON:API НЕ делает
Кратко
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-ресурсы через интерфейс:
- Включите ресурс "User registration" на странице
/admin/config/services/rest
. - Разрешите "Access POST on User registration resource" для Anonymous на
/admin/people/permissions/module/rest
. - Убедитесь, что на
/admin/config/people/accounts
разрешена регистрация.
Статья с сайта Drupal Documentation.