使用curl对Rails应用程序的RESTful请求忽略了AuthenticityToken

时间:2010-10-20 04:55:58

标签: ruby-on-rails http rest curl

使用curl执行REST HTTP请求时,是否有任何理由会忽略AuthenticityToken?

curl http://localhost:3000/Asset/9f3cb180-e410-11de-8a39-0800200c9a66.xml -X DELETE

上面将执行从数据库中删除给定ID的资产,而不考虑AuthenticityToken是什么(通常为零)。

class AssetsController < ApplicationController
    protect_from_forgery :only => [:create, :update, :destroy]
    #... More Rails Controller Code
    def destroy
      #destroy the Asset
    end

^这是Assets控制器读取的方式,明确定义应该保护destroy。

我尝试发送删除请求vial Net :: HTTP但是因为它们不提供AuthenticityToken而被拒绝。那么,任何想法为什么curl似乎总是在执行这些HTTP请求时成功?

1 个答案:

答案 0 :(得分:1)

Rails不对.xml请求执行伪造保护:“...仅检查非GET,HTML / JavaScript请求。” http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

也许你需要像这里描述的那样的东西? http://www.hyperionreactor.net/blog/token-based-authentication-rails-3-and-rails-2