Подтвердить что ты не робот

Rails 3 - разработка с OmniAuth - перенаправление после входа в/users/sign_in

Im, использующий программу с omniauth для входа в систему с помощью facebook. Я хочу, чтобы они были перенаправлены после входа на страницу, на которой они были, после входа в систему.

Я использовал

  def after_sign_in_path_for(resource_or_scope)
    store_location = session[:return_to]
    clear_stored_location
    (store_location.nil?) ? "/" : store_location.to_s
  end

в моем контроллере приложений и сделал session_helper с этим кодом

  def deny_access
    store_location
    redirect_to new_user_session_path
  end

  def anyone_signed_in?
    !current_user.nil?
  end

  private

    def store_location
      session[:return_to] = request.fullpath
    end

    def clear_stored_location
      session[:return_to] = nil
    end

И чтобы устранить проблему с перенаправлением на "services/", где у меня есть логика аутентификации с помощью facebook и других платформ, я использовал

skip_before_filter :store_location

в службах и других контроллерах, которые я не должен хранить в качестве местоположений.

Q1 Проблема, с которой я столкнулся сейчас, - это когда я использую ajax и визуализую форму входа в модальное окно, так это то, что когда пользователь успешно подписывается, он перенаправляется на /users/sign _in/. У меня нет пользовательского контроллера и я попытался сделать session_controller.rb и добавил skip_before... там, но он не работает.

Это мои маршруты для sign_in

new_user_session       GET   /users/sign_in(.:format)    {:action=>"new", :controller=>"devise/sessions"}
    user_session      POST   /users/sign_in(.:format)    {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session   GET   /users/sign_out(.:format)   {:action=>"destroy", :controller=>"devise/sessions"}

Q2 Я попытался использовать перенаправление, когда пользователи выходят

  def after_sign_out_path_for(resource_or_scope)
      (session[:return_to].nil?) ? "/" : session[:return_to].to_s
  end

Но это только перенаправляет меня на корневую страницу.

Я очень ценю любую помощь в этом,

4b9b3361

Ответ 2

Вы считали, что Devise предоставлен помощник sign_in_and_redirect(resource_or_scope, *args) (подробности можно найти здесь)? Вы также получаете sign_out_and_redirect(resource_or_scope) среди других.

Q2. попробуйте проверить session[:return_to] - это скорее всего nil.

Ответ 3

Вы можете передать параметр, например: /auth/facebook?referrer=/path/to/redirect

После аутентификации Facebook этот параметр будет доступен вам в env["omniauth.params"].