Как использовать сессию [: user.return_to] от DEVISE - PullRequest
2 голосов
/ 03 марта 2011

Я пытаюсь использовать session[:user.return_to], но безуспешно ...

Мой код:

def after_sign_in_path_for(resource)
  (session[:"user.return_to"].nil?) ? "/" : session[:"user.return_to"].to_s
end

Итак, проблема в том, что: когда я проверяю свои переменные сеанса,У меня нет ни одного с этими именами.

Я бы хотел перейти на страницу, над которой я работал, прямо перед тем, как меня перенаправили на страницу входа.

Ответы [ 5 ]

3 голосов
/ 19 апреля 2011

Борется с той же проблемой. У меня так себе решение пока так ..

В моем application_controller.rb

  before_filter :set_page # at the top and then

  protected
  def set_page
    unless request.referer.include?('/users/sign')
      session[:return_to] = request.referer
    end
  end

Оператор исключением предназначен для предотвращения возврата пользователя на страницу входа или выхода. Мне не нравится, что URL здесь жестко запрограммирован, поэтому я хотел бы увидеть лучшее решение. Также кажется, что before_filter никогда не происходит на странице, которая перенаправлена ​​на страницу входа в систему, поэтому, если вы нажмете что-то, что требует входа, после входа вы вернетесь на страницу, с которой вы нажали ссылку, а не фактическую ссылку сам по себе.

2 голосов
/ 16 ноября 2012

Есть несколько способов сделать это.

С новой версией Devise (я на 2.1.2) добавление before_filter :authenticate_user! к вашему контроллеру автоматически настроит это поведение для вас.

Если вы все еще хотите настроить это вручную, один из способов - просто указать путь в session. Devise ожидает найти его в session["#{resource}_return_to"], где 'resource' - это название вашей пользовательской модели. Так обычно это session["user_return_to"]. У тебя был период "." в вашей версии, которая могла быть причиной ваших ошибок. Кроме того, session принимает строковые значения для ключей, поэтому не нужно пытаться символизировать его.

Другой способ - переписать метод after_sign_in_path_for(resource), как вы делали. Более подробную информацию о том, как это сделать, можно найти на вики-устройстве devise How To: Перенаправление на текущую страницу после входа в систему .

Наконец, так как это приведет к перенаправлению, вы можете рассмотреть возможность использования полных URL.

def after_sign_in_path_for(resource)
  session["#{resource}_return_to"] || root_url
end
0 голосов
/ 17 июня 2013

в вашем ApplicationController.rb

 def after_sign_in_path_for(resource)
   sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')
   if request.referer == sign_in_url
     super
   else
     stored_location_for(resource) || request.referer || root_path
   end
 end

Stored_location_for (ресурс) - это встроенный метод Devise, в котором хранятся местоположения, из которых пришел пользователь.

0 голосов
/ 02 августа 2011
0 голосов
/ 03 марта 2011

Вам необходимо определить переменную сеанса, прежде чем перенаправить кого-либо.

session[:url_back] = "/***
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...