Как вы используете 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. Если нет, ваш вариант-отключить маркер подлинности в сеансе форма, хотя и не рекомендуется.