Rails 4.0.0.beta1 でOmniAuthを使用すると、SessionsController で設定されたセッション値がリダイレクトで保持されないという問題が発生します。コードに問題があるのか、Rails 4 のバグなのか、OmniAuth gem との非互換性なのかを突き止めようとしています。OmniAuth 開発者戦略を使用しています。
これが何かを意味するかどうかはわかりませんがSessionsController#create
、行の後にデバッガーを配置しsession[:user_id] = user.id
てセッション オブジェクトのクラスを調べると、次のようになります。
ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash
ただし、Rails 3.2 を実行している別のアプリケーションで同じセッション クラスを調べると、次のようになります。
Hash
OmniAuth が NullSessionHash オブジェクトを適切に処理できないのではないでしょうか?
セッションコントローラー
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
config/initializers/secret_token.rb
MyApp::Application.config.secret_key_base = 'REMOVED'
config/initializers/session_store.rb
MyApp::Application.config.session_store :encrypted_cookie_store, key: '_my_app_session'