我有一个Rails 4表单,它使用Carrierwave和Jcrop来上传头像的图像。我已经成功完成了一个配置文件类型。上传头像图片或跳过图片上传时,它可以正常工作。
但是在我的新表单中,每当我实际添加图片并提交时,我都会ActionController::InvalidAuthenticityToken in StudentProfilesController#create
。然而,如果我跳过图像上传,一切正常并且创建了配置文件。
我已经阅读了很多关于此的帖子,他们都在讨论带有真实性令牌的隐藏表单字段,但是我无法在任何地方找到这个,无论是这个,还是完全正确的工作。我所拥有的只是在标题中,以下内容(用x替换标记):
<meta content="authenticity_token" name="csrf-param" />
<meta content="xxxxxxx" name="csrf-token" />
其他一些重要的事实:有很多jquery摆弄头像作物选择(我在上传之前在选定图像上与Jcrop本地做)。但是对于其他一切正常工作的配置文件类型也是如此。这里明显不同的一点是表单设置为“远程”,即:
<%= form_for(@student_profile, html: { remote: true, multipart: true } ) do |f| %>
一般来说,我不希望任何人调试我的代码。我只想弄清楚这个图片上传组件是如何以某种方式覆盖我的真实性令牌。我错了,我的表格中没有隐藏的authenticity_token字段吗?如果是这样,我在哪里可以找到它?如果没有,这是如何上传的?这里的任何指导将不胜感激。
更新
在会话转储中,我也看到了这个(用x替换了标记):
_csrf_token: "xxxxxxxx"
session_id: "cb2076df134740cf2ba14e38b2ed78c6"
显示的令牌与上面元标记中的令牌匹配。这是否意味着令牌被发送了?
最后,请求参数显示以下内容:
{"utf8"=>"✓",
"student_profile"=>{"crop_x"=>"318.54545454545456",
"crop_y"=>"902.5454545454546",
"crop_w"=>"1698.909090909091",
"crop_h"=>"1698.909090909091",
"first_name"=>"Zachary",
"last_name"=>"Bolton",
"nickname"=>"Zach",
"date_of_birth"=>"",
"avatar"=>#<ActionDispatch::Http::UploadedFile:0x007fb9101c1058 @tempfile=#<Tempfile:/var/folders/60/bynswzcx6p3bx0bdr61xbtf00000gn/T/RackMultipart20140218-4819-mkwye0>,
@original_filename="Zach.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"student_profile[avatar]\"; filename=\"Zach.jpg\"\r\nContent-Type: image/jpeg\r\n">},
"commit"=>"Add student"}
更新
此时的古代历史,但我确实使用了Remotipart作为推荐,它就像一个魅力。