2015年10月29日木曜日

Deviseとomniauth-facebookでFacebook認証したときに元いたページに戻りたい

Deviseとomniauth-facebookでFacebook認証でのログインを実装してたのですが、
元いたページに戻れなかったので、どうやるのか調べました。

修正前
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def after_sign_in_path_for(resource)
    super
  end
end

いろいろ調べてみたところ、ちゃんとセットしているところがあったので、
そこでセットしている request.env['omniauth.origin'] から取得するようにしました。
一応、他サイトに飛ばないように自分のサイトかどうかはチェックしています。
修正後
def after_sign_in_path_for(resource)
  referer = request.env['omniauth.origin']
  if referer.present? && referer.starts_with?(request.protocol + request.host_with_port)
    referer
  else
    super
  end
end


参考URL
https://github.com/intridea/omniauth/issues/306
http://stackoverflow.com/questions/11355928/devise-redirect-to-previous-page-after-authenticating-user-request-referer-re
https://github.com/intridea/omniauth/blob/master/lib/omniauth/strategy.rb#L213
http://blog.yasuoza.com/2012/08/16/devise-omniauth-facebook/

0 件のコメント:

コメントを投稿