我一直在努力解决这个问题已经有一段时间了,但却无法做到 找到解决方案。我需要一个用户才能查看多个顶级 只有一次登录的域名。
我的理解是,这需要在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]
。
非常感谢任何帮助。
答案 0 :(得分:8)
这个有点棘手。由于cookie只能分配给(并从中检索)当前域(例如“forms.example.com”)和父域(“.example.com”,但不是“.com”),但不能分配给其他域(“othersite.com”),你必须找到另一种解决方案。这与Rails无关,但与cookies有关。
编辑:会话依赖于存储在cookie中的特定于客户端的句柄,这就是会话也不能跨域工作的原因。
This site有一个可能的解决方案来创建跨域cookie,这是我所知道的最干净的方式,尽管它可能有一些安全隐患。更复杂的版本会让服务器直接通过某个安全通道进行通信。
如果您正在寻找更通用的单一登录服务,请尝试实施某种形式的OpenID。
答案 1 :(得分:2)
对于Rails 2.3中的子域
ActionController::Base.session = { :domain => ".mydomain.com" }
对于顶级域名,请尝试this middleware。
我此刻一直在使用上述中间件,但它并没有按预期工作。如果您使用中间件,则不需要上面的代码,因为它也处理子域。
答案 2 :(得分:1)
如果您希望跨域进行身份验证,无论它们是顶级域还是子域,您可能都需要像RubyCAS这样的东西。
答案 3 :(得分:0)
你的问题不够精确恕我直言。您是否想要一个cookie用于您拥有的所有Rails应用程序,或者它是否在单个环境中?如果是前者,您希望使用数据库支持的会话或RubyCAS行的某些内容来查看解决方案,以实现CAS协议。
答案 4 :(得分:0)
Keltia和zuk都是对的,答案是rubyCAS,我们已经进行了整合并允许
SSI - 单点登录-in 您签到一个站点,然后您自动登录到另一个站点
SSO - 单点注销 您从一个站点注销并自动从另一个站点注销
对我们来说,这是一个经过验证的解决方案,而不是一个难以实施的解决方案
我们正在使用它 http://www.cabslk.com和www.ticketslk.com
欢呼声, Sameera