Rails で JSON の API を提供しつつ、サーバーサイドレンダリングもするアプリケーションを作っていたのですが、ユーザ管理をしようと思ったところで、session[:user_id] = user.id
のようにいつもどおりユーザ情報をSessionで管理しようと思ったら、どうも Session が上手く使えてない模様。
config周りを見ても
config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_app_session'
としっかり設定されているし、なんで使えないんだろうと思ったら rails-api
の gem が悪さをしていたみたいです。
rails-api の README をみると
Session Management: If a config.session_store is supplied and config.api_only = false, this middleware makes the session available as the session method in ActionController.
と書いてあり、
config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_app_session'
Rails.application.config.api_only = false
としてあげる必要がありました。
rails-api
を使って API を提供しつつ、サーバーサイドレンダリングもするアプリケーションを作ろうとするときには要注意ですね。。