我的用户可以在myapp.com上登录,并将其重定向到他们的子域,例如username.myapp.com
这是有效的,因为我有
Downhill::Application.config.session_store :cookie_store, :key => '_domain_session', :domain => :all
在session_store.rb
&我的应用程序控制器中的一个方法,它根据用户名检查子域(因此您无法登录到其他用户的子域)。
出于测试目的,username.myapp.com
和myapp.com都会在登录后显示用户的数据。
问题:当用户从username.myapp.com
退出时,他们会
ActionController::InvalidAuthenticityToken in Devise::SessionsController#destroy
但是:当他们从myapp.com
注销时,它就会退出。
有什么想法吗?
修改
我已覆盖after_sign_out_path_for
和after_sign_in_path_for
def after_sign_out_path_for(resource)
root_url
end
def after_sign_in_path_for(resource)
dashboard_url(:subdomain => current_user.subdomain)
end
答案 0 :(得分:6)
我认为你的应用程序布局中缺少这一行
<%= csrf_meta_tags %>
答案 1 :(得分:1)
似乎这样做的唯一方法是显式设置会话域,如下所述:InvalidAuthenticityToken between subdomains when logging in with Rails app。设计也存在IE和子域的问题 - https://github.com/plataformatec/devise/wiki/How-To:-Use-subdomains。
我的解决方案:
# config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, {
key: '_app_session',
domain: Rails.configuration.domain
}
# config/environments/development.rb
config.domain = 'lvh.me'
# config/environments/production.rb
config.domain = 'my_app.com'
如果您在浏览器中查看Cookie,则会看到域名的Cookie和my_app.com&#39;和&#39; .my_app.com&#39;在生产环境中。