Как вы используете cURL для аутентификации в приложении Rails, которое использует Devise?

Я хочу протестировать веб-сервис rails с помощью cURL, но до сих пор я мог делать это только при отключении before_filter :authenticate_user!. Но я хотел бы войти априори, а затем создать, уничтожить и т.д.

Я видел, что с помощью cURL вы можете аутентифицировать и сохранять информацию о сеансе в файле cookie, который вы используете для своих следующих запросов, но я не мог заставить его работать с Devise: в моем сценарии пользователь регистрируется при использовании электронной почты /password, поэтому я пытаюсь:

curl \
  -X POST \
  -d '[email protected]&password=password' \
  -c cookie \
  http://localhost:3000/users/sign_in > out

и я получаю: ActionController::InvalidAuthenticityToken in Devise/sessionsController#create

Может кто-нибудь дать мне идею/пример?

Спасибо!

Ответы

Ответ 1

Это работает:

Аутентифицировать:

curl -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -X POST http://localhost:3000/users/sign_in \
  -d "{'user' : { 'email' : '[email protected]', 'password' : 'password'}}" \
  -c cookie

Показать:

curl -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -X GET http://localhost:3000/pages/1.xml \
  -b cookie

Ответ 2

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

skip_before_filter :verify_authenticity_token

в вашем контроллере, где происходит авторизация, лучше даже ограничить его действием авторизации только с помощью.

Ответ 3

Вы пробовали что-то вроде этого (не тестировалось):

curl --user name:password http://www.domain.com
curl --user name:password -f 'key=value' http://www.domain.com

Ответ 4

Получил следующий от Хосе Валима:

Если у вас есть веб-сервис, войдите в систему следует выполнить с помощью протокола HTTP Auth. Если нет, ваш вариант отключить токен аутентификации на сессии форма, хотя и не рекомендуется.