1

我正在尝试将图像从 iPhone 上传到使用 Carrierwave 进行处理的工作 Rails 应用程序。我是否需要考虑 rails 需要的 CSRF 真实性令牌?

我的 Titanium app.js 文件中有以下内容,这些内容几乎来自他们的 Snappost 示例代码:

xhr.open('POST','http://myapp.com/foos/1/bars');
xhr.send({media:originalImage});

我的 rails 动作非常简单:

def create
  @bar = @foo.bars.build(params[:bar])
  @bar.image = params[:file]    
  respond_to do |format|
    if @bar.save
      format.html { redirect_to(@foo, :notice => 'Bar was successfully created.') }
      format.json  { render :json => @bar, :status => :created }
      fotmat.xml { render :xml => @bar, :status => :created }
    else
      format.html { render :action => "new" }
      format.json { render :json => @bar.errors, :status => :unprocessable_entity }
      format.xml { render :xml => @bar.errors, :status => :unprocessable_entity }
    end
  end
end

在我的设备上,当我尝试上传时,我收到描述超时的“xhr.onerror”警报。我的服务器日志如下:

于 2011-05-01 17:01:33 -0500 为 ###.###.#.### 开始 POST "/foos/1/bars"

由 BarsController#create as MULTIPART_FORM 处理

参数:{"media"=#<ActionDispatch::Http::UploadedFile:0xabdd968 @original_filename="285050.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name= \"媒体\";文件名=\"2
85050.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20110501-32635-olgooh>>, "foo_id"=>"1"}

^[[1m^[[36mSQL (1.9ms)^[[0m ^[[1mSHOW TABLES^[[0m

^[[1m^[[35mFoo Load (0.1ms)^[[0m SELECT foos.* FROM foos WHERE foos.id = 1 LIMIT 1

^[[1m^[[36mSQL (2.6ms)^[[0m ^[[1mBEGIN^[[0m

^[[1m^[[35mSQL(5.9ms)^[[0m回滚

在 468 毫秒内完成 406 不可接受

4

1 回答 1

2

您是对的,这是导致问题的真实性令牌(或缺少真实性令牌)。 如何忽略 Rails 中特定操作的真实性令牌?有更多关于如何忽略它的细节。更多详情请访问http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html

于 2011-05-02T01:00:28.270 回答