いつもjpmobileにはお世話になっております^^
今回、Rails 3.1.0 + Devise 1.5.0 + jpmobile 2.0.5の環境下で、mobileのときにURLに自動付与されるsession_idがおかしな値になり、ログインできない現象に見舞われました。
環境は以下の通りです。
* Rails 3.1.0
* Devise 1.5.0
* jpmobile 2.0.5
* sessionはActiveRecordStore
jpmobile 2.0.4のときはうまく動いていたので、diffを調べていたら、memcache storeをサポートした際の変更が原因でした。
https://github.com/jpmobile/jpmobile/commit/36a84626a6ed0a0564e59cff8db20e1ad42d2508
case Rails.application.config.session_store.to_s when "ActionDispatch::Session::MemCacheStore" require 'jpmobile/session/mem_cache_store' ActionDispatch::Session::MemCacheStore.send :include, ParamsOverCookie when "ActiveRecord::SessionStore" require 'jpmobile/session/active_record_store' ActionDispatch::Session::AbstractStore.send :include, ParamsOverCookie end
この部分で、SessionStoreを判別して処理を分けているので、つまり、このコードが呼ばれる前に Rails.application.config.session_store を設定する必要があります。
今回、以下のようなファイル名だったため、順番が逆で、jpmobileの初期化コードが正しく呼ばれていませんでした。
config/initializers/jpmobile_init.rb で、
require 'jpmobile' MyApp::Application.config.jpmobile.mobile_filter MyApp::Application.config.jpmobile.form_accept_charset_conversion = true
config/initializers/session_store.rb で、
MyApp::Application.config.session_store :active_record_store MyApp::Application.config.session_options = {:cookie_only => false}
手っ取り早い解決法として、session_store.rbをasession_store.rbにリネームすることにしました。