【发布时间】:2017-01-13 00:10:37
【问题描述】:
我有一个 Rails 应用程序,我可以在其中通过 ajax 发布问题的答案,它工作正常,但是,我添加了 aws-js-sdk 脚本以便能够从浏览器在我的答案中上传图像,图像将被上传到s3,它在回调中发回新上传图片的url,然后我保存答案。
我包含这样的库:
<%= javascript_include_tag "//sdk.amazonaws.com/js/aws-sdk-2.1.12.min.js" %>
预期行为:当我提交带有图片的答案时,请求标头应包含 HTTP_X_CSRF_TOKEN 以验证表单是从我的网站内提交的。
问题:请求头不包含HTTP_X_CSRF_TOKEN,导致错误ActionController::InvalidAuthenticityToken
【问题讨论】:
-
我知道我可以添加`= hidden_field_tag :authenticity_token, form_authenticity_token`来添加真实性令牌,但我想知道它为什么不自动包含。
-
S3上传成功了吗? S3上传成功后,上传图片的哪些信息和表单一起提交?您没有显示任何代码,因此我们不得不猜测出了什么问题,但您似乎正在使用 AWS 开发工具包上传图像,然后将标准表单提交到您的 Rails 应用程序。 AWS SDK 不参与向 Rails 应用程序的表单提交,因此我不确定您为什么希望它自动向该提交添加标头。
-
@MarkB 是的,S3 上传成功,它返回 s3 存储桶中的图像 url,我将其包含在答案的正文中,然后我将表单提交给 Rails 应用程序。因此,我希望 AWS 开发工具包不会干预表单提交,但出于某种原因它确实如此。这有意义吗?
-
@MarkB 如果我没有在我的答案中上传图片,默认情况下标题包含 HTTP_X_CSRF_TOKEN,但是当通过 AWS SDK 上传图片时,标题不包含 HTTP_X_CSRF_TOKEN。跨度>
-
由于没有代码,我只是假设没有图像您可以保存答案,但是当用户上传图像时,您会遇到此问题。只是想知道当您将文件上传到 s3 时是否关闭了您的真实性令牌,这会导致此问题。
标签: javascript ruby-on-rails ajax amazon-web-services aws-sdk