Devise OmniAuthでサービス先へリダイレクトする前にごにょごにょしたい
OmniAuth、ほとんど何もしなくてもOAuthを実装出来て便利ですよね。
でもサービス側へリダイレクトする直前にごにょごにょしたいことってありませんか?
ありませんか。そうですよね、普通は。。
まあ今回は普通じゃなかったんです。リダイレクト直前にちょっとSessionに色々小細工をしたかったんですが、OmniauthCallbacksController#passthru
をオーバーライドしてもうまくいかなかったんで、その方法を共有します。
環境
Service | Version |
---|---|
Ruby | 3.0.2 |
Ruby on Rails | 6.1 |
devise | 4.8.0 |
omniauth | 2.0.4 |
omniauth-google-oauth2 | 1.0.0 |
omniauth-rails_csrf_protection | 1.0.0 |
対応
最初に書いた通り、リダイレクト寸前にごにょごにょしようとpassthruをオーバーライドしたんですが上手くいかず、それもそのはずコントローラーには到達していなかったんですね。
でもご安心ください。OmniAuthは大変によく完成されたgemです。そういったときのためのメソッドが用意されていました。
今回はリダイレクト時に追加されたparameterをsessionに格納してみましょう。
link_to :OAuth, user_xxxxxx_omniauth_authorize_path(hoge: :fuga)
config/initializers/omniauth.rb
OmniAuth.configure do |config| config.before_request_phase = ->(env) { request = ActionDispatch::Request.new(env.dup) request.session[:fuga] = request.params[:hoge] } end
所感
所感というか愚痴というか。
なぜこういう方法を調べたかというと、別の方がなんとも頓珍漢な方法でOAuthまでにごにょごにょされておりまして、それはあんまりだろうと調べてみた結果こういうメソッドが用意されていたという。。
ちっとは自分で調べるという事くらいしてほしいですね。