Повторная проверка подлинности


Как я могу войти в свой Drupal через API и использовать модуль rest ws с вызовами API?

Например, у меня есть пользователь с именем тест. Я хочу войти в систему с тестовым пользователем, затем использовать вызовы API с чем-то вроде токена или удостоверения личности (я не знаю, что) и заставить Drupal распознавать пользователя в:

global $user;

Как это возможно?

Я попытался отправить имя пользователя и пароль в /путь пользователя/входа и получить токен от /восстановление/сеанс/токен

Он возвращает что-то вроде этого:

emGevPKZl9aLe90tOJ1ZK9rnp--6BMeNV3RP27aqcsY

Но когда я использую его в параметрах заголовка с именем X-CSRF-токен, он ничего не делает.

 1
Author: Sina Miandashti, 2014-09-22

2 answers

Вам, вероятно, было бы проще использовать модуль службы он лучше поддерживается и используется гораздо чаще, чем модуль restws. Он поддерживает несколько типов вызовов веб-служб, включая RESTful.

УСЛУГИ:

Стандартизированное решение для интеграции внешних приложений с Drupal. Обратные вызовы служб могут использоваться с несколькими интерфейсами, такими как REST, XMLRPC, JSON, JSON-RPC, МЫЛО, AMF и т.д. Это позволяет Сайт Drupal для предоставления веб-сервисов через несколько интерфейсов с использованием одного и того же кода обратного вызова.

 2
Author: munkiepus, 2015-09-17 13:17:57

Имя пользователя

Если не указано в вашем settings.php в виде строки регулярного выражения.. ($conf['restws_basic_auth_user_regex']= '/^ws_.*/';) restws требует, чтобы ваше имя пользователя начиналось с restws, поэтому restws_test или что-то в этом роде.

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

Ссылка на разговор https://www.drupal.org/node/1664352

Сайт Drupal использует собственную аутентификацию - и поэтому не выдает заголовок типа "Здесь требуется аутентификация HTTP".

Такие инструменты, как плакат и wget, делают не отправляйте предоставленные вами учетные данные для аутентификации HTTP, если только сайт не запросит их, а Drupal этого не делает. Таким образом, поскольку учетные данные не отправляются, модуль restws_auth_basic не использует их для входа на сайт Drupal.

Итак, для wget - добавьте переключатель "--auth-без проблем", чтобы wget все равно отправил учетные данные. Т.е.

$ wget --user=ws_user1 --password=xxxxx --header="Accept: application/xml" --auth-no-challenge -O - http://www.example.com/node/1

Кроме того, curl, похоже, отправляет учетные данные без добавления дополнительного переключателя - т.е.

$ curl --user ws_user1:xxxxxx --header "Accept: application/xml" http://kbailey.icmsv4.dev3/node/1

Дополнительно

Если вы используете почтальона.. Я предлагаю вам включить перехватчик... это в основном означает, что для тестирования вы можете войти на свой сайт как обычно, и это будет сохранено в файлах cookie сеанса, к которым перехватчик позволяет подключаться. Когда вы уже вошли в систему, вы обнаружите, что можете с радостью опубликовать сообщение в restws/сеанс/токен и получить токен csrf в ответ.

 1
Author: Cosy, 2020-06-15 09:13:00