2015-06-02 3 views
2

Я использую Devise для обработки аутентификации пользователей. Я поместил знак в другой вид контроллера. Когда пользователь входит в эту форму, я хочу перенаправить их обратно на эту страницу. Я пытался достичь этого со следующим:Переадресовать пользователя на страницу по адресу

Контроллер Применение

after_filter :store_location 

def store_location 
    return unless request.get? 
    if (request.path != "https://stackoverflow.com/users/sign_in" && 
     request.path != "https://stackoverflow.com/users/sign_up" && 
     request.path != "https://stackoverflow.com/users/password/new" && 
     request.path != "/login" && 
     request.path != "/signup" && 
     request.path != "https://stackoverflow.com/users/password/edit" && 
     request.path != "https://stackoverflow.com/users/confirmation" && 
     request.path != "https://stackoverflow.com/users/sign_out" && 
     !request.xhr?) # don't store ajax calls 
     session[:previous_url] = request.fullpath 
    end 
    end 



def after_sign_in_path_for(resource) 
    if request.referer == streams_url(page: params[:page]) 
     session[:previous_url] || root_path 
    else 
    root_path 
    end 
    end 

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

+0

После входа в систему, для чего вы хотите перенаправить на страницу входа? –

+0

После того, как пользователь войдет в систему из этой формы, они должны быть перенаправлены обратно на URL-адрес потока, из которого они вошли, а не корневой путь. –

+0

try 'redirect_to: back' – forthowin

ответ

2
def after_sign_in_path_for(resource) 
    sign_in_url = new_user_session_url 
    if request.referer == sign_in_url 
     super 
    else 
     stored_location_for(resource) || request.referer || root_path 
    end 
    end 

добавить выше в application_controller. Если последний запрос будет подписан, он будет вызывать родительский запрос.

+0

@Alex работает? –

+0

Нет, что должно произойти, когда пользователь входит в систему через эту форму на этой странице, их необходимо отправить обратно на эту страницу при успешном входе в систему. это перенаправление на root_path. –

+0

какие у вас сеансы # новый url? это new_user_session_url? –

0

Если у вас есть before_filter: authenticate_user! в вашем контроллере приложений вы должны сохранить свое местоположение с помощью фильтра перед фильтром. Также убедитесь, что вы разместили его перед authenticate_user!

before_filter :store_location