Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AWS JS SDK时,请求标头不包括HTTP_X_CSRF_令牌_Javascript_Ruby On Rails_Ajax_Amazon Web Services_Aws Sdk - Fatal编程技术网

Javascript 使用AWS JS SDK时,请求标头不包括HTTP_X_CSRF_令牌

Javascript 使用AWS JS SDK时,请求标头不包括HTTP_X_CSRF_令牌,javascript,ruby-on-rails,ajax,amazon-web-services,aws-sdk,Javascript,Ruby On Rails,Ajax,Amazon Web Services,Aws Sdk,我有一个Rails应用程序,我可以通过ajax发布问题的答案,它工作得很好,但是,我添加了aws js sdk脚本,以便能够从浏览器上传答案中的图像,图像将上传到s3,s3在回调中发回新上传图像的url,然后我保存答案 我像这样包括了图书馆: <%= javascript_include_tag "//sdk.amazonaws.com/js/aws-sdk-2.1.12.min.js" %> 预期行为:当我提交带有图像的答案时,请求头应包含HTTP\u X\u CSRF\u

我有一个Rails应用程序,我可以通过ajax发布问题的答案,它工作得很好,但是,我添加了
aws js sdk
脚本,以便能够从浏览器上传答案中的图像,图像将上传到s3,s3在回调中发回新上传图像的url,然后我保存答案

我像这样包括了图书馆:

 <%= javascript_include_tag "//sdk.amazonaws.com/js/aws-sdk-2.1.12.min.js" %>

预期行为:当我提交带有图像的答案时,请求头应包含
HTTP\u X\u CSRF\u令牌
,以验证表单是否从我的网站内提交


问题:请求标头不包括
HTTP\u X\u CSRF\u令牌
,这导致错误
ActionController::InvalidAuthenticityToken
标头中未设置真实性令牌。在表单标记中将其设置为隐藏字段,如下所示:

<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">
我不知道S3 gem是如何工作的,但是如果它直接提交给Amazon,那么它就不会使用真实性令牌。Amazon无法知道服务器上rails应用程序的密钥。显示生成的HTML代码,以查看S3 gem是否在主窗体之外创建了一个单独的窗体,或者它是否试图在另一个
中嵌入一个
,这是无效的HTML

如果需要,可以使用以下行关闭控制器中的令牌检查:

protect_from_forgery :except => :action_method

请参阅此处的文档:和此处

我知道我可以添加“=隐藏的\u字段\u标记:真实性\u令牌,表单\u真实性\u令牌”来添加真实性令牌,但我想知道为什么它没有自动包含。S3上传成功吗?S3上传成功后,您将随表单一起提交关于上传图像的哪些信息?您没有显示任何代码,因此我们必须猜测出哪里出了问题,但您似乎正在使用AWS SDK上载图像,然后向Rails应用程序提交标准表单。AWS SDK不参与向Rails应用程序提交表单,因此我不确定您为什么希望它自动向该提交添加标题。@MarkB是的,S3上载成功,它返回S3 bucket中的图像url,我将其包含在答案正文中,然后我将表单提交给Rails应用程序。因此,我希望AWS SDK不会干预表单提交,但是出于某种原因。这有意义吗?@MarkB如果我在回答中没有上传图像,那么默认情况下,标题确实包含HTTP_X_CSRF_标记,但是当我通过AWS SDK上传图像时,标题不包括HTTP_X_CSRF_令牌。由于没有代码,我只是假设如果没有图像,您可以保存答案,但当用户上载图像时,您会遇到此问题。只是想知道,当您将文件上载到s3时,是否关闭了Authentity token,这导致了这个问题。
protect_from_forgery :except => :action_method