Rails的会议上得到DELETE请求破坏
问题描述:
可能重复:
WARNING: Can't verify CSRF token authenticity railsRails的会议上得到DELETE请求破坏
我送使用JQuery AJAX一个DELETE HTTP请求。 URL(/ myitems/1234)与注销URL(/ users/sign_out)不同,但在请求后,我发现用户会话已被销毁。
我正在使用Devise验证宝石。
这里是日志:
Started DELETE "/myitems/2538" for 127.0.0.1 at 2012-06-26 19:09:49 +0400
Processing by MyItemsController#destroy as */*
Parameters: {"id"=>"2538"}
WARNING: Can't verify CSRF token authenticity
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 6 LIMIT 1
(0.0ms) BEGIN
(0.0ms) UPDATE "users" SET "remember_token" = NULL,
"remember_created_at" = NULL,
"updated_at" = '2012-06-26 15:09:49.055774'
WHERE "users"."id" = 6
(1.0ms) COMMIT
Completed 401 Unauthorized in 7ms
routes.rb中包含一行:
resources :myitems
,仅此而已有关myitems。
控制器对删除代码:
def destroy
puts 'delete'
end
更新
同样发生在POST请求。
答
这个问题(如@Thilo评论所暗示的)是您的AJAX请求不包含CSRF标记。 Rails的默认行为是在CSRF令牌不匹配的情况下清除会话。这就是你的会话被删除的原因。
解决方案:
1)在您的AJAX请求中传递CSRF令牌。根据您的需要,您可能能够利用Rails的UJS代码自动添加适当的CSRF标头。
2)跳过特定控制器操作的真实性标记验证,虽然这可能会产生负面的安全隐患。
我将此标记为社区wiki,以便其他人可以改进它,因为我现在没有时间。
请显示您的控制器代码的删除方法。 –
我更新了问题。 – Paul
查看http://stackoverflow.com/questions/7203304/warning-cant-verify-csrf-token-authenticity-rails – Thilo