5

我对 Rails 和 Rack 还很陌生,但是这个人有一篇关于使用Rack 实现动态会话域中间件的看似简单的文章。代码看起来不错,我已经在我的本地机器上实现了它,但我仍然无法在一次登录时超越顶级域。

这是中间件代码:

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

4

1 回答 1

1

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

于 2010-03-12T04:24:07.893 回答