场景:使用子域并设计的多租户 Rails 应用程序问题:我希望用户能够登录到 mydomain.com,然后作为登录用户转发到他们自己的 subdomain1.mydomain.com 地址。现在他们只能直接登录到他们自己的子域。
我是一个相对的 Rails 新手,我找不到一个简单的解决方案(尽管似乎必须有一个)。理想情况下,我希望 mydomain.com 和 subdomain1.mydomain.com 共享一个 cookie,但我的技能不适合编写自定义中间件。显然,由于它是多租户的,我无法在所有子域中共享一个会话。坚持了几天,并好奇是否有一个简单的解决方案(例如 config.session_store 域设置)在我开始查看 OAuth 或其他更繁琐的解决方案之前我缺少。任何帮助将不胜感激!
编辑:当然,我只是在发布后才发现这个。在注册 Rails 和 Devise 后,将用户登录到他们的子域。将尝试 config.session_store 域: :all 并在过滤器推荐之前发布任何详细信息,如果它不起作用,至少看起来是个好主意。
编辑:适用于我的特定设计的解决方案与子域设置:
class ApplicationController < ActionController::Base
before_action :check_subdomain
def check_subdomain
unless request.subdomain == "" or request.subdomain == session[:subdomain]
redirect_to request.protocol+request.domain
end
end
end
session_store.rb
My::Application.config.session_store :cookie_store, key: '_my_session' , :domain => :all, :tld_length => 2
基本上,我在登录时使用 session[:subdomain] 在会话中设置子域,并使用它将会话范围限定为当前用户。否则,当域在 session_store 中设置为 :all 时,它会破坏范围。如果用户未被授权,它会通过 request.protocol(http:// 或 https://)+request.domain 重定向将他们重定向到公共主页。简单的!现在,用户可以在同一个会话中在基本域和他们的子域之间移动。