我在我的Rails 3应用程序中使用Devise进行身份验证。该应用程序使用PostgreSQL模式和Apartment gem来实现多租户。
在创建帐户之后,针对特定子域名的登录和注销运作良好。用户只能登录其特定帐户的子域名,这很好。
这是我遇到问题的地方......
全新用户访问注册URL:
http://foo.com/signup
默认情况下,当他们点击提交时,会创建一个新帐户,但是用户会被送到:
http://foo.com/dashboard
相反,我希望他们转到:
http://myaccount.foo.com/dashboard
为了实现这一点,我在registrations_controller.rb
文件中覆盖了after_sign_up_path_for
方法:
def after_sign_up_path_for(resource)
root_url(:subdomain => resource.account.subdomain)
end
这个功能按照设计预期工作--它加载了正确的URL--但是用户的会话被创建在根域名(foo.com)而不是子域名下,因此用户需要登录。
我发现一个建议是更改 config/initializers/session_store.rb
为:
config.session_store :cookie_store, :key => '_domain_session', :domain => :all
但这样允许任何人登录到任何子域名的帐户,显然是不好的。
问题:我如何确保在注册过程中创建的会话对于创建的子域有效?
:domain => '.mydomain'
(允许跨子域cookie),然后修改我的before_filter
来检查正确的子域吗? - Rob Sobersbefore_filter
是一个不错的选择,或者可以添加一个Warden策略来检查子域名以验证用户的有效性。您还可以使用Warden钩子,如set_user
或after_authentication
来实现相同的功能。 - Viren