高木のブログ

【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 %>

参考


Written by ytkg, Twitter, GitHub

Pixela