※ 本サイトにはアフィリエイト広告が含まれます
大昔に自分が書いた記事を参考に実装してたのだけど、うまく行かない。
OmniAuthのSetup Phaseを使ってScopeを動的に変更する
具体的には calendar.readonly
を取りたいのに calendar
を要求してしまうという謎の挙動。
原因は ?scope=calendar
を付与して分岐しようとしてたからだった。
( scope
というパラメーター名がダメ)
omniauth-google-oauth2
は request.params
でオプションを上書きする機能があって、デフォルトでこれが有効になっている。
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
はこの挙動がないので、以前の記事を書いた時は発生しなかった、ということだった。めでたしめでたし(?)