Drupal Services OAuth

8

Я работаю над этой проблемой уже пару недель, и я не могу найти решение для моей жизни. Тот факт, что я не нашел достойной документации (на веб-сайте Drupal или где-либо еще), также не поможет. И вопросы уже здесь устарели (Сервисы 2.x).

Я пытаюсь создать REST-сервис для сайта, поддерживаемого Drupal Commerce. На данный момент все, что должен сделать сервис - это разрешить базовые операции CRUD на ресурсе Order и быть защищенным с помощью OAuth, OAuth 2.0 не требуется. Он также должен вызываться сценарием на сервере, поэтому перенаправление входа в систему невозможно (все выполняется с помощью двухсторонней аутентификации).

Текущий стек:

  • PHP 5.3.15
  • Drupal 7.15
  • Профиль Commerce Kickstart (7.x-2.0-rc1)
  • Услуги 7.x-3.2
  • OAuth 7.x-3.0 + 18-dev
  • Аутентификация OAuth 7.x-3.2
  • REST Server 7.x-3.2
  • Commerce Services 7.x-1.x-dev (это модуль, в который я добавил свой код заказа)

Я могу заставить функции Retrieve / Index работать для Orders, если я использую библиотеку OAuth PHP и просто каждый раз вызываю запрос токена (я даже не уверен, что там происходит, за исключением того, что он аутентифицируется ...). Если я попытаюсь выполнить POST для заказов и создать заказ, то получу 406 со сценарием и 401 при попытке прямого запроса POST из консоли REST в Google Chrome, даже если OAuth отключен.

Это сделало отладку кошмаром, так как я понятия не имею, что происходит внутри моей функции создания. Я попытался убрать из него логику создания заказа и просто отразить полезную нагрузку запроса. Все еще получите ошибки 406/401.

Я предполагаю, что получаю 401 ошибки, потому что заказы требуют аутентификации пользователя (даже если OAuth отключен для службы).

Я не понимаю, почему я получаю 406 ошибок, хотя. Я принимаю application / json, и это мой сервер REST для возврата.

Заказы не создавались даже до того, как я прокомментировал логику создания заказов. (Который я эффективно использую в другом месте на сайте.)

Оценка заранее.
-T

tynor
источник
В последние несколько месяцев сервисный модуль был обновлен, поэтому вам необходимо отправить токен в заголовке для всех запросов POST, PUT и DELETE. Убедитесь, что это не та проблема, с которой вы столкнулись : drupal.org/node/2013781 Это не влияет на запросы GET.
CR47
Я предлагаю проверить RESTws , это будет в ядре D8.
Кв

Ответы:

1

Для получения запросов не требовалась аутентификация сеанса, для POST, PUT, DELETE требуется аутентификация сеанса, чтобы узнать пользователя и проверить, есть ли у него права на выполнение запроса или нет.

У аутентификации Oauth есть много типов аутентификации. Вы должны убедиться, что вы аутентифицируете пользователя, а не приложение (например), поэтому запрос авторизован для выполнения.

Мухаммед Гомма
источник
0

Вы проверяли то же самое при отключении аутентификации oAuth? Если нет, попробуйте после возвращения образца json obj в сервисную службу.

Bala.D
источник
Добро пожаловать в ответы Drupal! Пожалуйста, не оставляйте комментарий или вопрос в качестве ответа. Это не форум, и ответы никогда не должны использоваться, чтобы задать ФП вопрос. (Как только у вас будет достаточно репутации , вам будет позволено оставить комментарий.)
Free Radical