omniauth-google-oauth2のリクエストパラメーターでオプションを上書きする機能にハマった

2022-09-03
※ 本サイトにはアフィリエイト広告が含まれます

大昔に自分が書いた記事を参考に実装してたのだけど、うまく行かない。

OmniAuthのSetup Phaseを使ってScopeを動的に変更する

具体的には calendar.readonly を取りたいのに calendar を要求してしまうという謎の挙動。

原因は ?scope=calendar を付与して分岐しようとしてたからだった。
scope というパラメーター名がダメ)

omniauth-google-oauth2request.params でオプションを上書きする機能があって、デフォルトでこれが有効になっている。

https://github.com/zquestz/omniauth-google-oauth2/blob/8bebf08bcce88a4dc3e59111eb97786b166828e8/lib/omniauth/strategies/google_oauth2.rb#L34-L36

options[:authorize_options].each do |k|
  params[k] = request.params[k.to_s] unless [nil, ''].include?(request.params[k.to_s])
end

つまり、/auth/google_oauth2?scope=drive とかやると drive の要求が走ってしまう。
(APIが有効になってなければエラーになるはずだけど)

hd とかは上書きできちゃ駄目なケースの方が多いだろうし、この挙動が不要な場面多そうだが……。

少なくとも無効化できてほしいということでプルリクエストしていたが、無事マージされた。
https://github.com/zquestz/omniauth-google-oauth2/pull/423

omniauth-github はこの挙動がないので、以前の記事を書いた時は発生しなかった、ということだった。めでたしめでたし(?)



広告