Tech Racho エンジニアの「?」を「!」に。
  • 開発

jpmobile 2.0.5でsession_storeを指定するときの注意

いつも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にリネームすることにしました。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。