omniauth2.0 で GET /auth/:providerが404になる問題
昔からomniauthを使っている人にとっては
GET /auth/:provider のエンドポイントにアクセスすることで、
TwitterでのTwitterログインだったり、Facebookログインだったりを実装できるのは当たり前のような話に感じる。
しかし、omniauth2.0からこのエンドポイントのHTTPメソッドがGETではなく、POSTになっていたようである。
これは僕がTwitterログインを含む機能を実装する際に GET /auth/twitter が404になっていたため、気づいたものである。
問題を指摘しているIssue
OmniauthのREADMEでの言及
どうやって対応するか?
上のURLにあるように、
POSTメソッドで/auth/:providerに対してアクセスする必要があるので、各リンク先をPOSTメソッドで送信する形に変更する。
link_to 'Sign in via X', '/auth/:provider', method: :post
次に、これだけではCSRF検証に失敗してしまうので、omniauth-rails_csrf_protection というGemをインストールする
これらはCSRF検証周りの面倒を見てくれるGemで、OmniauthがこのGemのインストールしての対応を推奨している。
以上で、Omniauthで各種ログインができるようになるはず。
もしTwitterログインをRailsで作ったけどうまく動かない人は、ぜひこの対応を試してみてほしい。