Railsでサブドメインにアクセスすると、デフォルトの設定では、ログイン(セッション)が保持されません。
解決策は以下の通りです。
ググると間違った(or 古い)情報も散乱していたので、惑わされないようにそちらも一応のせておきます。
session_store.rbの設定
session_store.rb で以下のように設定します。
# session_store.rb Appname::Application.config.session_store :cookie_store, key: '_user_session', domain: 'example.com'
少し解説すると、
domain: 'example.com'
のように、domainを指定するのがポイント。
production, staging, development で以下のように分岐してあげればいいかなと。
if Rails.env.production? Appname::Application.config.session_store :cookie_store, key: '_user_session', domain: 'example.com' elsif Rails.env.staging? Appname::Application.config.session_store :cookie_store, key: '_user_session', domain: 'staging-example.com' else Appname::Application.config.session_store :cookie_store, key: '_user_session', domain: 'lvh.me' end
ちなみに、stagingで用いている 'lvh.me' は、127.0.0.0 に割り当てらているドメインです。localhost だとサブドメインのチェックはできないので、lvh.me はすごく便利。
domainオプションを追記する際には、keyも変えるべし
ここはハマったところなのですが、domain: 'example.com' を追加すると、セッションの情報も変わります。しかし、keyの名前は同じ。
すると、既にログインしていたユーザーがログアウトできなくなるなどの不都合が生じてしまう可能性があります。(実装にも依ると思いますが)
なので、domainオプションを追加するタイミングで、session_key の名前も変更しておいたほうが無難だなーと思います。
関連記事