Как перенести предыдущий URL через логин Facebook на Rails? - PullRequest
0 голосов
/ 17 января 2019

Я использую Omniauth для входа в Facebook через приложение Rails.Также я пытаюсь реализовать дружественную переадресацию.Я имею в виду, что как только вы войдете в систему через Facebook и зарегистрируетесь через устройство, приложение должно вернуться к предыдущему 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 голосов
/ 17 января 2019

Я столкнулся с той же проблемой с моим приложением. Поэтому я применил патч обезьяны. Что вы можете сделать, так это сохранить свой предыдущий URL в сеансе, прежде чем перейти на страницу входа. Затем после входа вы можете проверить, присутствует ли эта переменная сеанса или нет, если она есть, вы можете перенаправить на этот 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

Надеюсь, это поможет

0 голосов
/ 17 января 2019

Вы пробовали request.referrer в контроллере?

...