rails6.1.0
どちらかと言うと、プログラム設計に関する質問になります。
初心者につきどのように設計したら良いか分からずにいます。
昨日もこちらで質問させていただいた関連になります。
回答いただき、プログラム設計を頑張ってみましたが解決できずにいます。
###状況
railsアプリに「ソーシャルログイン機能」を実装しました。
これに伴い「外部サービス連携(連携のON/OFFを切り替えるページ)」に取り掛かっているところです。
###困っていること
ログイン時と外部サービス連携設定時では「外部サービスへの認証」部分は同じですが、認証後のページ遷移先が異なります。
例えば
・ログインページだと、認証後はダッシュボードに遷移
・外部サービス連携ページだとajaxで描画するだけなので遷移不要
このため「外部サービスへの認証」部分だけを共通化して各ページで使いまわしたいのですが、上手く設計できずにいます。
###試したこと
認証部分をコントロールとして切り出しました。
app\controllers\concerns\omniauth_callbacks.rb
ruby
1class OmniauthCallbacksController < ApplicationController 2 3 def hoge 4 user_hash = auth_hash 5 end 6 7 private 8 9 def auth_hash 10 request.env['omniauth.auth'] 11 end
これを必要なページ(コントローラ)に継承させました。
app\controllers\sns_connects_controller.rb
ruby
1class SnsConnectsController < OmniauthCallbacksController 2 def update 3 # 認証のONに伴い外部サービス認証する 4 end 5end 6 7class SessionesController < OmniauthCallbacksController 8 def create 9 # ログインに伴い外部サービス認証する 10 end 11end
\app\views\sns_connects\index.html.erb
ruby
1<%= link_to "Google連動する", "/auth/google_oauth2", method: :post %>
\config\routes.rb
ruby
1get 'auth/:provider/callback', to: 'omniauth_callbacks#hoge'
ここまで書いて気付きましたが、これだと継承元である「OmniauthCallbacksControllerのhoge 」へ飛ぶだけで継承先には制御は渡ってきません。
実際動かすと、
OmniauthCallbacksControllerのhogeを抜けて処理が終わります。
当たり前と言えば当たり前ですが・・・。
どうすれば継承先に制御がうつるでしょうか?
そもそもこの方法じゃ無理でしょうか?
他にミックスインも試しましたがミックスインの形にすると上記のルーティングが呼べませんでした。
このルーティング部分(プロバイダ先にリクエストを送る)というのが自分には足かせになってて上手く設計できずにいます・・・。
###補足
「外部サービス認証」は、
ruby
1<%= link_to "Google連動する", "/auth/google_oauth2", method: :post %>
を踏むことで飛んでいき認証します。
その戻り先がルーティングに指定した、
to: 'omniauth_callbacks#hoge'
になります。
先輩方どうかアドバイスお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/28 00:52
2021/10/28 00:56
2021/10/28 02:31
2021/10/28 02:42
2021/10/28 09:05