2009-01-22 9 views

Répondre

3

Non. La raison pour laquelle cela ne fonctionne pas est que Flex ne transmet pas les cookies lors de l'utilisation de FileReference # upload. Une solution de contournement (pour Rails 2.3) consiste à insérer un gestionnaire de middleware personnalisé pour les demandes Flash qui prend des arguments dans la chaîne de requête et les ajoute à l'environnement HTTP_COOKIE avant qu'il n'atteigne Rails.

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/ 
     params = ::Rack::Utils.parse_query(env['QUERY_STRING']) 
     env['HTTP_COOKIE'] = [ @session_key, params[@session_key] ].join('=').freeze unless params[@session_key].nil? 
    end 
    @app.call(env) 
    end 
end 

Assurez-vous que le fichier est dans votre chemin de charge et l'ajouter à votre session_store.rb:

ActionController::Dispatcher.middleware.use FlashSessionCookieMiddleware, ActionController::Base.session_options[:key] 

Ensuite, vous aurez besoin de sortir la clé de session à une vue quelque part et le charger à l'aide ExternalInterface intérieur de Flex:

def upload_path_with_session_information 
    session_key = ActionController::Base.session_options[:key] 
    uploads_path(session_key => cookies[session_key], request_forgery_protection_token => form_authenticity_token) 
end 

Comme vous pouvez le voir, j'ai appelé ressource uploads et j'utilise l'aide upload_path_with_session_information pour me donner une belle URL que lorsque Affecté à partir FLEX vous permet de Gardez votre magasin de cookies pour tout le reste.

Honnêtement, je ne me souviens pas où j'ai trouvé cette information en ligne, mais je ne peux pas prendre le crédit pour cela. J'espère que cela a du sens pour vous.

+0

Je viens juste de réaliser que vous avez spécifiquement mis Rails 2.2 dans le sujet. Désolé pour ça. – camwest

Questions connexes