2010-08-28 17 views
1

J'ai un SWFUpload travailler avec paperclip sur des rails 3 je me suis tourné au large de la autehnticitytoken avec la ligne suivante dans mon contrôleur:rails 3 swf_upload InvalidAuthenticityToken et l'envoi de cookie de session

skip_before_filter :verify_authenticity_token, :only => :create 

Je sais que suis en train pour obtenir des sessions de travail (flash n'envoie pas cela) Bien sûr, j'ai googlé mon cul de mais pas de chance jusqu'à présent. ce que j'ai à mon avis (partie)

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

Alors j'envoyer la clé de session avec les données de poste. Je dois "attraper" ces params avec du code de middleware.

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 

quelqu'un peut-il m'aider! vraiment coincé maintenant!

+0

http://railsforum.com/viewtopic.php?id=40591 – heldopslippers

Répondre

1

C'est probablement parce que "session_key" a changé pour "clé". Voici cette mise à jour qui fonctionne pour moi.

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 

En outre, vous aurez envie de vérifier pour vous assurer que le javascript utilise la « clé » au lieu de « session_key » pour ActionController::Base.session_options[:key] lors de la configuration de votre variable JavaScript.