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

Railsのjpmobile環境下でカスタムセッションストアを使う方法

Railsでは、セッションストアとしてデフォルトではCookieStoreを使用します。ActiveRecordStoreを使う機会も多いと思います。

セッションストアの動作を変更したい場合、モンキーパッチを当てる方法もありますが、継承してしまうのが一般的かと思います。

# config/initializers/a_session_store.rb
MyApp::Application.config.session_store :my_active_record_store
MyApp::Application.config.session_options = {:cookie_only => false}

require 'action_dispatch'
module ActionDispatch
  module Session
    class MyActiveRecordStore < ActiveRecord::SessionStore
      # 何かオーバーライドする
    end
  end
end

ところでこの場合、jpmobile(2.0.5)のtrans_sidがうまく動かなかったりします。
jpmobileはApplication.config.session_store.to_sが"ActiveRecord::SessionStore"かどうかを見て判断するため、継承したらダメなのですね。

手動で設定してあげるのが、簡単そうです。

# config/initializers/jpmobile_init.rb
require 'jpmobile'
MyApp::Application.config.jpmobile.mobile_filter
MyApp::Application.config.jpmobile.form_accept_charset_conversion = true

module Jpmobile::TransSid
require 'jpmobile/session/active_record_store'
  ActionDispatch::Session::AbstractStore.send :include, ParamsOverCookie
end

CONTACT

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