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