There's an echo in my head

日々のメモ。

Rack::Session::Abstract::IDのsecureオプションをリクエストごとに変えられるようにしてみた

a2ikm/rack-dynamic_session_secure

RailsのセッションストアではRack::Session::Abstract::IDに渡される:secureオプションの値によってCookieのsecure属性を付けたり外したりできるんだけど、基本的にベタの値*1しか受け付けていない。

これをリクエストによって切り替えられると嬉しい場面が出てきたので、Procを渡して動的に評価されるよう書いてみた。Railsだとこんな感じ:

# Gemfile
gem 'rack-dynamic_session_secure', github: 'a2ikm/rack-dynamic_session_secure'

# config/initializers/session_store.rb
secure = ->(env) {
  !!(Rack::Request.new(env).path =~ /neko/)
}

MyApp::Application.config.session_store :some_store, { secure: secure }

セッションストアを初期化する際に評価するようモンキーパッチをあてていて、とりあえず動いているんだけど、これですべてがカバーできているかはちょっと自信がない。あとテストが書かれていない。

*1:truthyかfalseyか

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。