Ahm*_*eat 11 javascript ajax ruby-on-rails amazon-web-services aws-sdk
我有一个Rails应用程序,我可以通过ajax发布问题的答案,它工作正常,但是,我添加了aws-js-sdk脚本,以便能够从浏览器上传我的答案中的图像,图像将上传到s3,发送回来在回调中新上传的图像的url,然后我保存答案.
我把这个库包括在内:
<%= javascript_include_tag "//sdk.amazonaws.com/js/aws-sdk-2.1.12.min.js" %>
Run Code Online (Sandbox Code Playgroud)
预期的行为:当我使用图像提交答案时,请求标题应包含HTTP_X_CSRF_TOKEN以验证表单是否在我的网站内提交.
问题:请求标头不包含HTTP_X_CSRF_TOKEN,这导致错误ActionController::InvalidAuthenticityToken
标头中未设置真实性令牌。它被设置为表单标签中的隐藏字段,如下所示:
\n\n<form class="edit_user" id="edit_user_6" action="/users/6/set_facilitator" accept-charset="UTF-8" data-remote="true" method="post">\n <input name="utf8" type="hidden" value="\xe2\x9c\x93">\n <input type="hidden" name="_method" value="patch">\n <input type="hidden" name="authenticity_token" value="yrr7gWaLmE8ul4s0JcNmAU6H0YB+c7YR/8yCE7it+cRlG9lfdejTSFT7bhydWEQPSqv2E7gVPQ++9mvfJDfJeA==">\n <select class="form-control" data-submit="true" name="user[facilitator_id]" id="user_facilitator_id">\nRun Code Online (Sandbox Code Playgroud)\n\n当您通过 AJAX 提交表单时,authenticity_token也会作为参数提交。
Parameters: {"utf8"=>"\xe2\x88\x9a", "authenticity_token"=>"vcvY+cRQC0oM99l5+BFHu6GShPAedugTP1jRqXCxRa3bVGFLjLSVbMFk78aR5N0ol1WOu1noAo/GF6B67PSk6Q==", ...}\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道 S3 gem 是如何工作的,但如果它直接提交给 Amazon,那么它不会使用真实性令牌。Amazon 无法知道服务器上 Rails 应用程序的密钥。向我们展示生成的 HTML 代码,以查看 S3 gem 是否创建了主表单之外的单独表单,或者是否尝试将 a 嵌入<form>到另一个<form>无效的 HTML 中。
如果需要,您可以使用以下行关闭控制器中的令牌检查:
\n\nprotect_from_forgery :except => :action_method\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅此处的文档:http ://guides.rubyonrails.org/v5.0/working_with_javascript_in_rails.html#form-for和此处http://guides.rubyonrails.org/v5.0/security.html#csrf-countermeasures
\n| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |