困った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
- キャンセル時のルーティング
0 件のコメント:
コメントを投稿