使用OmniAuth和Rails重定向会话不会持续4

时间:2013-03-12 01:58:24

标签: ruby-on-rails session omniauth ruby-on-rails-4

我在使用OmniAuth和Rails 4.0.0.beta1时遇到问题,其中SessionsController中设置的会话值没有在重定向中保留。我试图弄清楚它是否在我的代码中,Rails 4中的错误,或与OmniAuth gem不兼容。我正在使用OmniAuth开发人员策略。

我不确定这是否意味着什么,但是如果我在SessionsController#create行之后的session[:user_id] = user.id中放置调试器并检查类会话对象,我得到:

ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash

但是,如果我在运行Rails 3.2的不同应用程序中检查同一个会话类,我会得到:

Hash

也许OmniAuth无法正确处理NullSessionHash对象?

sessions_controller

class SessionsController < ApplicationController
  skip_before_filter :authenticate_user!

  def create
    user = User.find_or_create_by_auth_hash(auth_hash)
    session[:user_id] = user.id
    redirect_to root_path
  end

  protected

  def auth_hash
    request.env['omniauth.auth']
  end

end

配置/初始化/ secret_token.rb

MyApp::Application.config.secret_key_base = 'REMOVED'

配置/初始化/ session_store.rb

MyApp::Application.config.session_store :encrypted_cookie_store, key: '_my_app_session'

1 个答案:

答案 0 :(得分:5)

事实证明这与Rails 4和使用omniauth gem开发者策略之间的问题有关。我在https://github.com/intridea/omniauth/pull/674

中修复了它

<强>更新

由于PR没有合并,我想我会发布一个似乎适用于大多数人的简单解决方案。问题是开发人员策略不包括表单真实性令牌,Rails默认需要该令牌。您可以使用以下命令在会话控制器中禁用此功能:

class SessionsController < ApplicationController
  skip_before_filter :verify_authenticity_token
  # ...
end