Если аутентифицируется каждый клиент, тогда можно отключить токен аутентификации
Это верно только в том случае, если вы используете другой механизм аутентификации, чем файлы cookie http.Поскольку вы упомянули 'session_id', я предполагаю, что это не так.
При использовании стандартного cookie-файла rails session_id, user_id, хранящегося в сеансе, и этого действия, доступного для веб-обозревателя, он будет подверженCSRF атаки.
Лучшей стратегией для API является реализация специального механизма аутентификации, своего рода токена аутентификации, который отправляется с каждым заголовком http.
Затем либо измените защиту csrf на null_session, либо, если выless paranoid полностью отключите защиту csrf для вашего запроса API, как описано здесь
Если вы все еще хотите придерживаться аутентификации на основе cookie для вашего API, вам следует установить токен аутентификации csrf с первым GETзапрос в дополнительный файл cookie.Затем вы читаете этот файл cookie и отправляете его токен в виде заголовка «X-CSRF-Token».Rails проверит наличие этого заголовка в методе protect_from_forgery, и, поскольку файлы cookie не могут быть прочитаны третьими сторонами, злоумышленник не сможет подделать этот запрос.
#application_controller.rb
protect_from_forgery with: :exception
after_action :set_csrf
def set_csrf
cookies['X-CSRF-Token'] = form_authenticity_token if protect_against_forgery?
end
# request session and x-csrf-toke
# the cookies will be stored into cookie.txt
curl -c cookie.txt http://example.com
#curl post command
curl -H "X-CSRF-Token: <token>" -b cookie.txt -d '{"item":{"title":"test"}}' "http://example.com/items.json"
См. : Verified_request? метод, чтобы увидеть, как рельсы проверяют подделку запроса.