使用设计注销时无效的真实性令牌

时间:2014-04-01 01:39:44

标签: ruby-on-rails ruby devise

我的用户可以在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_forafter_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

2 个答案:

答案 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;在生产环境中。