设计:将经过身份验证的用户重定向到Rails 5中的单个子域

时间:2019-04-17 18:48:35

标签: ruby-on-rails ruby devise ruby-on-rails-5 subdomain

我有一个使用Devise进行用户身份验证的Rails 5应用,当前在主域和子域中共享用户会话。

我想更改此行为,以便将经过身份验证的用户路由到子域sub.example.com,而将未经身份验证的用户保留在主域example.com上。

我发现的解决方案着重于多租户实现,但这不是多租户应用,此时我只需要将用户重定向到单个子域即可。

我目前正在使用自定义的Devise方法,将经过身份验证的用户重定向到所请求的资源,具体取决于其角色:

def after_sign_in_path_for(resource)
  if current_user.try(:guest?)
    documents_path
  else
    stored_location_for(resource) || dashboard_path
  end
end

这是否可以通过附加的应用程序控制器过滤器或其他方式处理?

1 个答案:

答案 0 :(得分:0)

可以覆盖devise方法,但是您可能希望将其移至application_controller,您将在其中访问Rails路径帮助器

fmtJson.MediaTypeMappings.Add(new System.Net.Http.Formatting.QueryStringMapping("_format", "json", "application/json"));

然后您将在class ApplicationController < ActionController::Base def after_sign_in_path_for(resource) if current_user.try(:guest?) documents_path else stored_location_for(resource) || dashboard_path end end def after_sign_out_path_for(resource) #send them somehwere end end

中需要类似的内容
config/initializers/session_store.rb

或者,如果您只想要一个特定子域的会话,则:

MyApp::Application.config.session_store :cookie_store, domain: '.maindomain.com'