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

Я использую devise with 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

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

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

Это мои маршруты для входа в систему

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

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

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

12 голосов | спросил Philip 15 J0000006Europe/Moscow 2011, 12:41:36

3 ответа


0

Я ответил на это здесь

Devise неправильно перенаправляет на сохраненное местоположение при использовании поставщика omniauth, такого как facebook

в application_controller.rb

 def after_sign_in_path_for(resource_or_scope)
   if request.env['omniauth.origin']
      request.env['omniauth.origin']
    end
end
ответил Daxon 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2011 19:45:34 +0400 2011, 19:45:34
0

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

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

ответил Michael De Silva 20 J0000006Europe/Moscow 2011, 13:27:26
0

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

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

ответил dobrinov 5 Mayam15 2015, 10:44:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132