Rails использует маркер подлинности для предотвращения CSRF .Он вставляет в каждую форму специальный токен, рассчитанный на основе сеанса текущего пользователя, и проверяет его при поступлении запроса на сервер.
Когда вы выполняете POST-запрос, используя curl, вы получаете эту ошибку, поскольку вы не передаете действительный токен аутентификации на сервер.Вы можете либо отключить эту защиту для вашего метода подобным образом (обратите внимание, что ее отключение сделает это действие уязвимым для CSRF):
protect_from_forgery :except => :some_action
или вы можете использовать ninja магия для передачи действительного токена подлинности на сервер.
Другой вариант основан на том факте, что Rails проверяет токен подлинности только для запросов с определенными типами содержимого.Если это API, и вы получаете ответ в JSON, вы можете попробовать установить тип содержимого запроса на application/json
, например:
curl -H "Content-Type: application/json" ...
См. Эти ссылки для получения дополнительной информации: one , два , три .