Я использую 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
И чтобы исправить проблему с перенаправлением на «сервисы», где у меня есть логика для аутентификации с 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
Но это только перенаправляет меня на корневую страницу.
Я действительно ценю любую помощь в этом,