如何通过Rails上的Facebook登录来接管以前的URL?

时间:2019-01-17 02:57:13

标签: ruby-on-rails facebook devise omniauth

我正在Rails应用程序上实现Omniauth Facebook登录。 我也在尝试实现友好的转发。 我的意思是,一旦您通过Facebook登录并通过devise注册,该应用程序应返回到先前的URL。

为此,我使用了会话变量。但是一旦应用程序重定向到Facebook,所有会话变量都消失了。

您能告诉我如何调用以前的URL吗?预先感谢。

[附录] 这是我的代码。

class ApplicationController < ActionController::Base
  def after_sign_up_path_for(resource)
    session[:url_before_signup] || "/#{I18n.locale}"
  end

  def store_location
    session[:url_before_signup] = stored_location_for(:user)
  end

class Users::OmniauthCallbacksController < Devise::RegistrationsController
    def facebook
        set_locale
        @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)

        if @user.persisted?
            # if you check session[:url_before_signup], it always turn to nil
            sign_in_and_redirect @user, :event => :authentication
            set_flash_message(:notice, :facebook_login_success) if is_navigational_format?
            set_flash_message(:notice, :facebook_login_success_and_regist_data) if is_navigational_format? && @user.completed_at.nil?
        else
            session["devise.facebook_data"] = request.env["omniauth.auth"]
            redirect_to new_user_registration_url
        end
    end

2 个答案:

答案 0 :(得分:0)

您是否在控制器中尝试过request.referrer

答案 1 :(得分:0)

我的应用程序遇到了同样的问题,所以我应用了一个猴子补丁。 您可以做的是,可以在登录之前将以前的URL存储在会话中。登录后,您可以检查此会话变量是否存在,如果存在,则可以重定向到该网址。

示例:

  class ApplicationController < ActionController::Base
     after_filter :store_location
      def store_location
        # store last url as long as it isn't a /users path
        if (request.fullpath != "/sign-in") || (!request.fullpath  =~ /\/users/)
          session[:previous_url] = request.fullpath 
        end
      end
    end




 class SessionsController < Devise::SessionsController
    def after_sign_in_path_for(resource_or_scope)
      if session[:previous_url].present?
        return_to_url = session[:previous_url]
      end
    end
 end

我希望这对您有帮助