我有一个使用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
这是否可以通过附加的应用程序控制器过滤器或其他方式处理?
答案 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'