Love Beautiful Code
OmniAuthとdevise_token_authを使用するとprefix_pathが変わる
Rails
2022/5/14
おそらくほとんどの人が遭遇しないハマりポイントだが、もし自分と同じような状況の人がいた時のために備忘録として記事を書きます。
前提
- Railsアプリケーション
- devise_token_authでAPI認証等を行なっている
- staging環境等の開発者だけの認証をGoogle Oauth2を用いて行う場合に、omniauth を使用する
ハマったポイント
omniauth gemを使用するとmidlewareで各Providerの認証ページへリダイレクトするためのpathが設定される。
defaultの設定では /auth
になっており、 path_prefix
で変更可能。
documentに記述されている通り、普通であれば /auth/:provider/callback
を設定して、 /auth/:provider
のパスでPOSTできるようにすれば設定終了。
だが、deviseを使用していて、かつomniauth gemをdeviseでは使用しない場合、
deviseが path_prefix
に omniauth
と設定しているため 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