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

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

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

curl 
  -X POST 
  -d 'email=email@example.com&password=password' 
  -c cookie 
  http://localhost:3000/users/sign_in > out

и я вам: ActionController::InvalidAuthenticityToken in Devise/sessionsController#create

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

спасибо!

4 ответов


это работает:

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

curl -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -X POST http://localhost:3000/users/sign_in \
  -d "{'user' : { 'email' : 'test@example.com', 'password' : 'password'}}" \
  -c cookie

показать:

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

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

skip_before_filter :verify_authenticity_token

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


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

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

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

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