Rails Twitter認証で困ったこと

2021年7月6日火曜日

Rails twitter

t f B! P L

困った1:認証動作に差異

qiitaと実装したアプリで認証の動きが違った。

ちなみに実装したアプリはこれ

ツイバト

qiitaでは

毎回認証確認の画面になる


実装アプリでは

一度ログインしたことがあったら一瞬認証画面になって即リダイレクトして戻ってくる


原因

認証のメソッドが違った。認証URLに差分あり

qiita

https://api.twitter.com/oauth/authorize?・・・


実装したアプリ

https://api.twitter.com/oauth/authenticate?・・・


twitterのメソッドauthenticateの動きは以下

このメソッドはGET oauth/authorizeとは異なり、ユーザーがすでにアプリケーション権限を付与している場合は、ユーザーがアプリケーションを再承認することなくリダイレクトが発生します。


アプリに使用していたgem omniauth-twitterは認証メソッドのデフォルトにauthenticateを使用している

対策

設定を変えるとリダイレクトせずに確認してくる

# omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, ENV["KEY"], ENV["SECRET"],
  # ↓これを追加
    {
      use_authorize: true,
    }
end
 

困った2:認証画面でキャンセルしたらエラー

認証画面でキャンセルしてツイバトに戻ろうとしたら以下のエラー

OAuth::Unauthorized

401 Unauthorized

原因

認証キャンセル時のルーティング設定をしていなかった

対策

それぞれのファイルに以下を追加
# omniauth.rb
OmniAuth.config.on_failure = Proc.new { |env|
  OmniAuth::FailureEndpoint.new(env).redirect_to_failure
}
# routes.rb
  get 'auth/failure', to: 'sessions#failure'
# sessions_controller.rb
  def failure
    redirect_to root_path
  end

参考

  • authorize

  • authenticate

  • omniauth-twitter





自己紹介

Webエンジニアをやっています。日々思ったことや、読書レビュー、IT系の記事などを書き連ねています

Rails6で追加 レコードを一括登録できるinsert_allについて

  insert_allの概要 rails6で追加された。複数レコードを一括登録できる。 insert_allドキュメント insert_allの使い方 形としてはこんな感じ。 モデル.insert_all([{カラム: value...},{カラム: value...}......

QooQ