概要
Railsアプリをサブディレクトリで動かすとdevise_token_auth
がうまく動作しなくなったのでパッチを当てた。
パッチの場所
詳細
動機
Railsアプリ(JSONAPIオンリー)をnginxのリバースプロキシの背後で動かそうとすると、グーグルでのログインができなくなった。
環境
使用しているgem(関係がありそうなもののみ抜粋):
- rails (4.2.6)
- devise (4.1.1)
- omniauth-google-oauth2 (0.4.1)
- devise_token_auth (0.1.37)
いずれも設定はほとんど初期値のまま。
原因
調査の結果、Railsアプリをサブディレクトリで動かしており、そのサブディレクトリの部分がdevise_token_auth
が生成するリダイレクト先URLに含まれていないことが原因だと判明。
Railsにはサブディレクトリで動作させるためのオプションがあるのだが、devise_token_auth
のリダイレクトの書き方が絶対パスっぽい書き方になっており、サブディレクトリ部分を無視するようになっていた。
さらに、グーグルからリダイレクトされたあとの処理でもrequest.host_with_port
などを使ってURLを生成しており、そこでもサブディレクトリ部分が無視されていた。
解決策
オプションではどうにもならなかったのでパッチを当てた。
パッチの内容は該当コミットを参照。
参考資料
http://qiita.com/61503891/items/732d9c123c39e35e97eb
http://guides.rubyonrails.org/configuring.html#deploy-to-a-subdirectory-relative-url-root