ActionController :: Devise中的InvalidAuthenticityToken :: SessionsController #create error

时间:2015-05-10 00:40:01

标签: ruby-on-rails devise

我遇到了以前没有的登录问题。直到今天,我都能够登录而没有任何问题。突然,当我尝试登录时,我得到:

ActionController::InvalidAuthenticityToken
def handle_unverified_request
  raise ActionController::InvalidAuthenticityToken
end

这是开发日志:

Processing by RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"kLm2udi5jHmIQbva2h1HH9IExxFo1qt/p1u9UTjtBQaeHr/23gcrSfTyJdRvhIKYJWh/MyUbSY2zf0vHU8qA9A==", "user"=>{"first_name"=>"John", "last_name"=>"Mack", "username"=>"johnmack", "email"=>"john@mack.com", "password"=>"[FILTERED]", "avatar_cache"=>""}, "commit"=>"Sign up"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms)

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
  actionpack (4.2.1) lib/action_controller/metal/request_forgery_protection.rb:181:in `handle_unverified_request'
  actionpack (4.2.1) lib/action_controller/metal/request_forgery_protection.rb:209:in `handle_unverified_request'
  devise (3.4.1) lib/devise/controllers/helpers.rb:251:in `handle_unverified_request'
  actionpack (4.2.1) lib/action_controller/metal/request_forgery_protection.rb:204:in `verify_authenticity_token'

直到几个小时前,我没有登录和退出的麻烦。我已经尝试清除浏览器数据,从多个浏览器登录,重新启动服务器,删除并重新创建数据库,并将我的代码恢复到两天前的状态。我得到了同样的错误。

我正在使用Rails 4.2和Devise 3。

这里有什么我想念的吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我最终将问题跟踪到如何设置会话存储以启用跨子域身份验证。最初我有这个:

HeartbeatPods::Application.config.session_store :cookie_store, key: '_Heartbeat-pods_session', domain: ENV["HEARTBEAT_HOSTNAME"], tld_length: 2

我把它更改为:

if Rails.env.production?
    Rails.application.config.session_store :cookie_store, key: '_Heartbeat-pods_session', domain: :all
else
    Rails.application.config.session_store :cookie_store, key: '_Heartbeat-pods_session'
end

原始解决方案在我的本地系统上支持跨子域身份验证,但最终borking。更新的解决方案仅支持生产设置上的跨子域身份验证。