我已经在这个问题上挣扎了很长一段时间,还没有找到解决方案。我需要一个用户能够看到一个单一的登录多个顶级域名。
我的理解是,这需要在environment.rb
中设置并使用before_dispatch
调用。这就是我想出来的:
require 'activesupport'
require 'dispatcher'
module ActionController
class Dispatcher
def set_session_domain
ActionController::Base.session_options.update :session_domain => "#{@request.host}"
end
before_dispatch :set_session_domain
end
end
但是,当我尝试从session[:session_domain]
拉取值时,这似乎不起作用。
任何帮助都是非常感谢的。
发布于 2008-12-18 14:51:12
这个有点棘手。由于cookies只能分配给当前域(比如“forms.example.com”)和父域(".example.com",但不能分配给".com"),而不能分配给其他域("othersite.com"),因此您必须为自己找到另一个解决方案。这与Rails无关,而是与cookie的工作方式有关。
编辑:会话依赖于存储在cookie中的特定于客户端的句柄,这就是会话也不能跨域工作的原因。
This site有一种可能的解决方案来创建跨域cookie,这是我所知道的最干净的方法,尽管它可能有一些安全隐患。更复杂的版本将使服务器直接通过某种安全通道进行通信。
如果您正在寻找一种更通用的单点登录服务,请尝试实现某种形式的OpenID。
发布于 2010-05-23 20:19:22
对于Rails 2.3中的子域
ActionController::Base.session = { :domain => ".mydomain.com" }
对于顶级域,请尝试this middleware。
我目前一直在使用上面的中间件,它并不完全像预期的那样工作。如果您使用中间件,则不需要上面的代码,因为它还处理子域。
发布于 2008-12-23 17:37:20
如果您希望跨域进行身份验证,而不管它们是顶级域还是子域,则可能需要使用RubyCAS之类的东西。
https://stackoverflow.com/questions/377137
复制相似问题