您可能会遇到几个问题
首先,您需要了解 Devise 在登录后重定向用户的方式,其次,子域在 Rails 中是如何路由的。
--
Devise
默认情况下,设计前往的路线current_user_path(这通常意味着users#show
)或您的路线中的某些内容:
def after_sign_in_path_for(resource)
current_user_path
end
这意味着当您接受用户的登录时,他们将被带到他们自己的路径。根据您的路线,这通常意味着主站点(无子域)用户的路径(domain.com/users/56
) 或者其他的东西。
由于您的问题没有提供任何具体信息,我只能对此进行推测。
--
子域
刚刚开发了一些支持子域的应用程序,您应该考虑有关路由到子域的一些事情。
用户登录后,他们需要能够被路由到特定的subdomain
。执行此操作的方法是使用constraint在你的路线中:
#config/routes.rb
constraints { subdomain: 'admin' } do
resources :photos
end
我们发现您无法使用正常的路由路径来执行此操作 - 您必须使用url
(not path
帮手)。例如:
photos_path(subdomain: current_user.name) #-> does not work (path is relative)
photos_url(subdomain: current_user.name) #-> will route to http://name.lvh.me:3000
您必须记住的是,如果您希望将流量重定向/路由到不同的子域,则需要引用url
帮助者的形式,而不是path
参考。
所以如果你采取after_sign_in_path_for
如上所示,您需要执行以下操作:
def after_sign_in_path_for(resource)
root_url(subdomain: resource.name)
end
--
Sessions
最后,您希望确保您的 Devise 会话 cookie 在设置后仍保持初始化状态。我们发现默认情况下不处理子域,因此您必须确保满足它们的要求:
在 Rails 中的子域之间共享会话(cookie)?
#config/initializers/session_store.rb
YOUR_APP_NAME::Application.config.session_store :cookie_store, key: '_app_name_session', domain: :all, tld_length: 2