Love Beautiful Code

OmniAuthとdevise_token_authを使用するとprefix_pathが変わる

Rails

2022/5/14

おそらくほとんどの人が遭遇しないハマりポイントだが、もし自分と同じような状況の人がいた時のために備忘録として記事を書きます。

前提

ハマったポイント

omniauth gemを使用するとmidlewareで各Providerの認証ページへリダイレクトするためのpathが設定される。 defaultの設定では /auth になっており、 path_prefix で変更可能。 documentに記述されている通り、普通であれば /auth/:provider/callback を設定して、 /auth/:provider のパスでPOSTできるようにすれば設定終了。 だが、deviseを使用していて、かつomniauth gemをdeviseでは使用しない場合、 deviseが path_prefixomniauth と設定しているため defaultの /auth/:provider にPOSTしてもルーティングエラーが発生する これに気づくのに丸一日かかりました。。。

対応策

コールバックパスやリダイレクトパスのprefixを omniauth に変更する

1# ルーティング 2get '/omniauth/:provider/callback', to: 'omniauth_callbacks#create' 3get '/omniauth/failure', to: 'omniauth_callbacks#failure' 4 5# リダイレクトパス 6## google oauth2の場合 7# /omniauth/google_oauth2にPOST 8= button_to 'ログイン', '/omniauth/google_oauth2', method: :post

参考文献