Ответ 1
Ток аутентификации не задан в заголовке. Он задан как скрытое поле в теге формы, например:
<form class="edit_user" id="edit_user_6" action="/users/6/set_facilitator" accept-charset="UTF-8" data-remote="true" method="post">
<input name="utf8" type="hidden" value="✓">
<input type="hidden" name="_method" value="patch">
<input type="hidden" name="authenticity_token" value="yrr7gWaLmE8ul4s0JcNmAU6H0YB+c7YR/8yCE7it+cRlG9lfdejTSFT7bhydWEQPSqv2E7gVPQ++9mvfJDfJeA==">
<select class="form-control" data-submit="true" name="user[facilitator_id]" id="user_facilitator_id">
Когда вы отправляете форму через AJAX, в качестве параметра также отправляется authenticity_token
.
Parameters: {"utf8"=>"√", "authenticity_token"=>"vcvY+cRQC0oM99l5+BFHu6GShPAedugTP1jRqXCxRa3bVGFLjLSVbMFk78aR5N0ol1WOu1noAo/GF6B67PSk6Q==", ...}
Я не знаю, как работает камень S3, но если он отправляется непосредственно в Amazon, то он не будет использовать токены аутентификации. Amazon не имеет возможности узнать секретный ключ вашего приложения rails на вашем сервере. Покажите нам код HTML, который генерируется, чтобы увидеть, создает ли камень S3 отдельную форму, которая находится вне вашей основной формы, или пытается внедрить <form>
в другой <form>
, что является недопустимым HTML.
Если вы хотите, вы можете отключить проверку маркера в контроллере с помощью этой строки:
protect_from_forgery :except => :action_method
См. документы здесь: http://guides.rubyonrails.org/v5.0/working_with_javascript_in_rails.html#form-for и здесь http://guides.rubyonrails.org/v5.0/security.html#csrf-countermeasures