deviseでOAuth認証後のログイン先を変更する方法

スポンサーリンク
Pocket
LINEで送る

deviseでfacebookログインを実装したのですが、そのままだとログイン後にroot_pathに飛んでしまいます。

このログイン先を変更したいなあと思いソースコードを読んで解決したので記事にします。

【OAuth】Ruby on Rails:deviseでfacebook認証を実装するやり方

 

omniauth_callbacks_controllerを見るとリダイレクトっぽいメソッドがあります。

sign_in_and_redirect @user, event: :authentication

このドキュメントがこれ↓

http://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/Helpers#sign_in_and_redirect-instance_method

ソースコードはこうなってます。

スポンサーリンク
def (resource_or_scope, *args)
  options  = args.extract_options!
  scope    = Devise::Mapping.find_scope!(resource_or_scope)
  resource = args.last || resource_or_scope
  (scope, resource, options)
  redirect_to (resource)
end

 

そして、こんな一文があります。

Sign in a user and tries to redirect first to the stored location and then to the url specified by after_sign_in_path_for. It accepts the same parameters as the sign_in method

 

つまりafter_sign_in_path_forで指定したパスにリダイレクトするようです

 

omniauth_callbacks_controllerに以下を追記

 def after_sign_in_path_for(resource)
  #リダイレクトしたいパス
 end

 

これで無事、指定したパスにリダイレクト出来ました。

 

ちなみに、session_controllerにも同じことを書いていますが、それは関係ないみたい。

omiauth_callbacks_controllerにafter_sign_inpath_forを作らないとダメみたいです。