我在将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 对象?
session_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'