rails 3 swf_upload InvalidAuthenticityToken и отправка сеанса cookie - PullRequest
1 голос
/ 28 августа 2010

У меня есть swfupload, работающий со скрепкой на рельсах 3 (наконец-то!) Я отключил токен аутентификации со следующей строкой в ​​моем контроллере:

skip_before_filter :verify_authenticity_token, :only => :create

Я знаю, что пытаюсь заставить сеансы работать (flashне отправлю это) Конечно, я погуглил свою задницу, но пока не повезло.это то, что я имею в виду (частично)

'<%= u session_key_name %>' : encodeURIComponent('<%= u cookies[session_key_name] %>'),
'authenticity_token' : '<%= form_authenticity_token %>',
'gallerie_id' : '<%= params[:gallery_id] %>'

Итак, я посылаю сеансовый ключ с данными сообщения.Я должен "поймать" эти параметры с помощью некоторого кода промежуточного программного обеспечения.

require 'rack/utils'

class FlashSessionCookieMiddleware
  def initialize(app, session_key = '_session_id')
    @app = app
    @session_key = session_key
  end

  def call(env)
    if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
      req = Rack::Request.new(env)
      env['HTTP_COOKIE'] = [ @session_key,
                             req.params[@session_key] ]
                           .join('=').freeze unless req.params[@session_key].nil?
      env['HTTP_ACCEPT'] = "#{req.params['_http_accept']}"
                           .freeze unless req.params['_http_accept'].nil?
    end
    @app.call(env)
  end
end

Кто-нибудь может мне помочь!действительно застрял сейчас!

1 Ответ

1 голос
/ 15 ноября 2010

Это, вероятно, потому что "session_key" изменился на просто "ключ". Ниже это обновление, которое работает для меня.

require 'rack/utils'
class FlashSessionCookieMiddleware
  def initialize(app, key = '_MYAPP_session')
    @app = app
    @key = (key || '_MYAPP_session')
  end

  def call(env)
    if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
      params = ::Rack::Utils.parse_query(env['QUERY_STRING'])
      unless params[@key].nil?
        env['HTTP_COOKIE'] = "#{@key}=#{params[@key]}".freeze
        # puts "env['HTTP_COOKIE'] #{env['HTTP_COOKIE'].inspect}"
      end
    end
    @app.call(env)
  end
end

Кроме того, вы захотите убедиться, что ваш javascript использует «ключ» вместо «session_key» для ActionController::Base.session_options[:key] при установке переменной javascript.

...