Rails - 使用Rack的动态cookie域

时间:2009-07-30 03:56:57

标签: ruby-on-rails session dns cross-domain

我对Rails和Rack很新,​​但是这个人对使用Rack to implement dynamic session domain middleware有一个看似简单的写作。代码看起来很好,我已经在我的本地机器上实现了它,但是我仍然无法在一次登录时超越顶级域名。

以下是中间件代码:

class SetCookieDomain
  def initialize(app, default_domain)
    @app = app
    @default_domain = default_domain
  end

  def call(env)
    host = env["HTTP_HOST"].split(':').first
    env["rack.session.options"][:domain] = custom_domain?(host) ? ".#{host}" : "#{@default_domain}"
    @app.call(env)
  end

  def custom_domain?(host)
    domain = @default_domain.sub(/^\./, '')
    host !~ Regexp.new("#{domain}$", Regexp::IGNORECASE)
  end
end

然后在environment.db中:

config.load_paths += %W(#{RAILS_ROOT}/app/middlewares)

最后在production.db(和development.db)中:

config.middleware.use "SetCookieDomain", ".example.org"

非常感谢任何帮助。

编辑:我正在运行Rails 2.3.3和Rack 1.0

1 个答案:

答案 0 :(得分:1)

我在开发模式下工作时遇到了类似的问题。当我尝试使用localhost时,我无法让它工作。但是,通过在/ etc / hosts中配置的域访问它以指向localhost,例如computer.local,我能够让它工作。