我有一个swfupload在rails 3上使用paperclip(最后!) 我在控制器中使用以下行关闭了autehnticitytoken:
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
可以有人帮帮我!真的卡住了!
答案 0 :(得分:1)
这可能是因为“session_key”改为“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变量时,您需要检查以确保您的javascript使用“key”而不是ActionController::Base.session_options[:key]
的“session_key”。