2018年6月13日朝から、Railsで作った自作サービスでTwitter認証をするとエラーが発生していました。
なんだろうと思いググってみると世界中でも同じ事象が起こっているようで、原因はTwitterAPIの仕様変更によるものでした。
Experiencing momentary disruptions?
— Twitter API (@TwitterAPI) 2018年6月7日
This means you have not enabled whitelisting for your callback URLs. Be sure to follow our guidance on how to make these changes by June 12th or your callback URLs will fail. See our May forum post for guidance. https://t.co/uWBvhX30E6
TwitterAppsで設定しているコールバックURLと、リクエストで送るコールバックURLのパラメータが異なる場合に弾く仕様に変わったとのことです。
コールバックURLを見直す
僕の自作サービスの場合、Twitter認証後はusers/mypage
に飛ばすようにしていたので、Twitter AppsのコールバックURLにはhttps://hogehoge/users/mypage
に設定していました。これがよくなかったようです。
この記事を参考に、コールバックURLをhttps://hogehoge/users/auth/twitter/callback
にします。
続いてアプリ側です。Rails+Devise+Omniauthで実装しているので、config/devise.rb
のコールバックURLを見直します。
config.omniauth :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET']
ここでコールバックURLを明示していなかったので、
config.omniauth :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET'], callback_url: "https://hogehoge/users/auth/twitter/callback"
とし、明示的にコールバックURLを一致させたところ解決しました。
(追記:Localと本番環境でURLが異なるはずなので、dotenvなどで環境変数にするとよいです。)
以上です。