Повторная проверка подлинности
Как я могу войти в свой Drupal через API и использовать модуль rest ws с вызовами API?
Например, у меня есть пользователь с именем тест. Я хочу войти в систему с тестовым пользователем, затем использовать вызовы API с чем-то вроде токена или удостоверения личности (я не знаю, что) и заставить Drupal распознавать пользователя в:
global $user;
Как это возможно?
Я попытался отправить имя пользователя и пароль в /путь пользователя/входа и получить токен от /восстановление/сеанс/токен
Он возвращает что-то вроде этого:
emGevPKZl9aLe90tOJ1ZK9rnp--6BMeNV3RP27aqcsY
Но когда я использую его в параметрах заголовка с именем X-CSRF-токен, он ничего не делает.
2 answers
Вам, вероятно, было бы проще использовать модуль службы он лучше поддерживается и используется гораздо чаще, чем модуль restws. Он поддерживает несколько типов вызовов веб-служб, включая RESTful.
УСЛУГИ:
Стандартизированное решение для интеграции внешних приложений с Drupal. Обратные вызовы служб могут использоваться с несколькими интерфейсами, такими как REST, XMLRPC, JSON, JSON-RPC, МЫЛО, AMF и т.д. Это позволяет Сайт Drupal для предоставления веб-сервисов через несколько интерфейсов с использованием одного и того же кода обратного вызова.
Имя пользователя
Если не указано в вашем 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 в ответ.