【Rails】OmniAuthを2系に上げたら、Twitter認証でログインできなくなったので対応した
2021/05/21
Twitter認証を導入している個人Railsアプリの話
問題
omniauthを2系に上げたら、Twitter認証でログインできなくなってしまった
正確にはomniauth-twitterを使っていて、内部で使われているomniauthをバージョンを上げた
エラーメッセージ
Started GET "/auth/twitter" for 192.168.48.1 at 2021-05-06 22:40:45 +0900
Cannot render console from 192.168.48.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
ActionController::RoutingError (No route matches [GET] "/auth/twitter"):
原因
CSRFの脆弱性(CVE-2015-9284)の対応に伴う変更らしい
サービスプロバイダの認証画面へのリダイレクトが2系ではPOSTのみ有効になった
対処法
- CSRFの脆弱性対応用のGemを追加する
- Twitter認証画面へリダイレクトをGETからPOSTに変更する
CSRFの脆弱性対応用のGemを追加する
omniauth-rails_csrf_protectionを追加
Gemfile
gem 'omniauth-twitter'
+ gem 'omniauth-rails_csrf_protection'
Twitter認証画面へリダイレクトをGETからPOSTに変更する
オプションmethod: :post
を追加
- <%= link_to '/auth/twitter', class: 'btn btn-block btn-primary' do %>
+ <%= link_to '/auth/twitter', method: :post, class: 'btn btn-block btn-primary' do %>