使用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请求时成功?
答案 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