2016-08-25 4 views
0

Если я получаю доступ к http://example.com, меня сначала отправляют на страницу входа в систему и после успешного входа в систему, на домашнюю страницу. Если я получаю доступ к http://example.com/myusers, после успешного входа в систему я хочу перенаправляться на страницу myusers, а не на домашнюю страницу.Rails Devise: как перенаправить пользователя после входа в систему

После прочтения нескольких сообщений в сети я понял, что в моем приложении application_controller.rb я могу манипулировать методом after_sign_in_path_for. Я проверил это, добавив конкретный URL-адрес этому методу, и я всегда получаю перенаправление на этот URL-адрес после успешного входа в систему.

def after_sign_in_path_for(resource) 
    "http://example.com/users"  
end 

Как это сделать, чтобы захватить URL-адрес, который пользователь запросил, прежде чем войти в систему и перенаправить пользователя соответственно?

ответ

2

Разрабатывают приходит что-то вроде этого вне коробки. В рамках сценария сбоя хранится последний запрос. Это «How-to» должно помочь вам в решении. Обратите внимание, что вам нужно вызвать этот метод в before_filter контроллера (ов):

before_filter: authenticate_user! 

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update#a-simpler-solution

+0

Спасибо за обмен! Не знал, что изобретатель сделал это уже. Потрясающие! – codyeatworld

+0

Их «How-To» -Section на самом деле довольно хорошо. Много замечательных вещей и примеров. – Mathias

1

Вы можете сохранить запрошенный URL-адрес в переменной сеанса.

session[:return_to] = request.original_url 

Вы можете установить переменный сеанс внутри из before_action :authorize метода в контроллере приложения, это может иметь смысл где-то еще в зависимости от вашей стратегии авторизации.

def authorize 
    if current_user_authorized? 
    # Authorized... 
    else 
    # Record the requested page URL and redirect to the login page. 
    session[:return_to] = request.original_url 
    redirect_to login_url, error: "Not authorized." 
    end 
end 

Чтобы использовать его, вы можете написать:

def after_sign_in_path_for(resource) 
    session[:return_to] || root_url 
end 
Смежные вопросы