Rails
Gem
TwitterAPI

Devise+OmniauthでTwitter認証時に「OAuth::Unauthorized 403 Forbidden」が出て認証できなくなった

2018年6月13日朝から、Railsで作った自作サービスでTwitter認証をするとエラーが発生していました。

スクリーンショット 2018-06-14 13.00.26.png

なんだろうと思いググってみると世界中でも同じ事象が起こっているようで、原因はTwitterAPIの仕様変更によるものでした。

TwitterAppsで設定しているコールバックURLと、リクエストで送るコールバックURLのパラメータが異なる場合に弾く仕様に変わったとのことです。

コールバックURLを見直す

僕の自作サービスの場合、Twitter認証後はusers/mypageに飛ばすようにしていたので、Twitter AppsのコールバックURLにはhttps://hogehoge/users/mypageに設定していました。これがよくなかったようです。

8FBD8047-90A9-42C3-A41A-FD2F15678C30.jpg

この記事を参考に、コールバックURLをhttps://hogehoge/users/auth/twitter/callbackにします。

続いてアプリ側です。Rails+Devise+Omniauthで実装しているので、config/devise.rbのコールバックURLを見直します。

config/devise.rb
config.omniauth :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET']

ここでコールバックURLを明示していなかったので、

config/devise.rb
config.omniauth :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET'], callback_url: "https://hogehoge/users/auth/twitter/callback"

とし、明示的にコールバックURLを一致させたところ解決しました。
(追記:Localと本番環境でURLが異なるはずなので、dotenvなどで環境変数にするとよいです。)

以上です。