Webuilder240

omniauth2.0 で GET /auth/:providerが404になる問題

2021-04-25 13:42:56 +0900

Ruby Omniauth Rails Twitter
昔から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で作ったけどうまく動かない人は、ぜひこの対応を試してみてほしい。

関連しそうなブログ