argh无效形式真实性令牌

时间:2011-02-01 10:38:10

标签: ruby-on-rails session

我不明白我已经发送了会话密钥和真实性令牌,如下所示:

  

开始发布POST   “/ test_cases / 20 / upload_script authenticity_token = IeH8aJgyM1zgW50MXN9UMj1P2wXKO8ir6lvPr1By5ow =安培; _waftt2_session = BAh7CUkiD3Nlc3Npb25faWQGOgZFRiIlM2M2YTA3M2NjM2VkZDFmYzBiZTA3MTE2NWYwY2E3MTlJIhBfY3NyZl90b2tlbgY7AEZJIjFJZUg4YUpneU0xemdXNTBNWE45VU1qMVAyd1hLTzhpcjZsdlByMUJ5NW93PQY7AEZJIhV1c2VyX2NyZWRlbnRpYWxzBjsARkkiAYA1YjY5NzQ4YjI3NWYzYzJkOTI2NjE3YmI3NzM3ZTQ3NGM2MmFiNjJhY2U2MzI4ZWUwOTcyOWQ2Y2NkNTVlNzViZWI5ZmQzZjkxNGUxYmIzYTQ0MWQ0ODQ3YTVlMDY5YTMyZmFlMDQwMGVmN2NkYjRhZGFkMDgxYmFkOWQxOTJkZQY7AFRJIhh1c2VyX2NyZWRlbnRpYWxzX2lkBjsARmkCSAI = - 3833637df52e559ca3bb3eb6d0d6b5a611d82bf4”

并且整个会话密钥也在env ['HTTP_COOKIE']中设置 - 是键和值

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我遇到了与swfupload完全相同的问题。

据我所知:

这是因为Flash没有在第一个请求中正确设置cookie(第二个和后续请求都没问题)。我使用了一些Rack中间件将会话密钥复制到env ['HTTP_COOKIE],但它没有按预期工作。

我的调查导致我在Rack :: Request对象中出现错误,如果env ['HTTP_COOKIE']最初为空,则会阻止它正确设置cookie。

这是最终为我修复的中间件代码:

class FlashUploadMiddleware
  def initialize(app,session_key)
   @app = app
   @session_key = session_key
  end

  def call(env)
    env['HTTP_COOKIE'] = "bugfix=true" unless env['HTTP_COOKIE']
    if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
      req = Rack::Request.new( env )
      req.cookies[ @session_key ] = req["session_id"] unless req["session_id"].nil?
    end
    @app.call(env)
  end

end

此类需要位于加载路径中某个名为flash_upload_middleware.rb的文件中。它是从config / initialisers中的.rb文件初始化的

ActionController::Dispatcher.middleware.use( 
    FlashUploadMiddleware,
    ActionController::Base.session_options[:key] )