2011-02-01 21 views
0

我不明白,我已經派出了會話密鑰和真實性令牌像這樣:哎呀無效形式真實性令牌

開始POST 「/ test_cases/20/upload_script authenticity_token = IeH8aJgyM1zgW50MXN9UMj1P2wXKO8ir6lvPr1By5ow = & _waftt2_session = BAh7CUkiD3Nlc3Npb25faWQGOgZFRiIlM2M2YTA3M2NjM2VkZDFmYzBiZTA3MTE2NWYwY2E3MTlJIhBfY3NyZl90b2tlbgY7AEZJIjFJZUg4YUpneU0xemdXNTBNWE45VU1qMVAyd1hLTzhpcjZsdlByMUJ5NW93PQY7AEZJIhV1c2VyX2NyZWRlbnRpYWxzBjsARkkiAYA1YjY5NzQ4YjI3NWYzYzJkOTI2NjE3YmI3NzM3ZTQ3NGM2MmFiNjJhY2U2MzI4ZWUwOTcyOWQ2Y2NkNTVlNzViZWI5ZmQzZjkxNGUxYmIzYTQ0MWQ0ODQ3YTVlMDY5YTMyZmFlMDQwMGVmN2NkYjRhZGFkMDgxYmFkOWQxOTJkZQY7AFRJIhh1c2VyX2NyZWRlbnRpYWxzX2lkBjsA RmkCSAI = - 3833637df52e559ca3bb3eb6d0d6b5a611d82bf4"

,整個會話密鑰也正在ENV設置[‘HTTP_COOKIE’] - 是鍵和值

我失去了什麼嗎?

+0

這個請求是如何產生的?您是自己設置env ['HTTP_COOKIE']還是僅僅是瀏覽器發送的會話cookie的當前值?我在我的應用中修復了類似的問題,但需要更多的上下文才能知道它是否是同一個問題。 – 2011-02-01 11:03:39

+0

我正在設置env ['HTTP_COOKIE']我自己,所以不是從瀏覽器。它是由swfupload生成的,但它只是一個普通的發佈請求,據我所知 - 我只是在URL上追加了真實性標記和會話密鑰。 – 2011-02-01 11:05:56

回答

0

我有swfupload完全相同的問題。

至於我能記得:

它是因爲Flash未能在其第一個請求正確設置Cookie(第2和後續請求都OK)。我使用了一些Rack中間件將會話密鑰複製到env ['HTTP_COOKIE]中,但沒有按預期工作。

如果env ['HTTP_COOKIE']初始爲空,我的調查將Rack :: Request對象中的錯誤導致我無法正確設置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])