2012-02-28 7 views
8

На сайтах с рельсами 2.3.8 У меня есть ссылки для входа на каждую страницу (которая выводит пользователя на отдельную страницу входа). После успешного входа пользователь в настоящее время перенаправляется на root. Вместо этого я хотел бы перенаправить на страницу, которую они ранее просматривали.Вернуться на предыдущую страницу после входа в систему (Rails)

Я попытался с помощью request.referer:

redirect_back_or_default(request.referer) 

Где redirect_back_or_default:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

Но что порождает "доступ запрещен" сообщение об ошибке, даже несмотря на то, Войти успешно.

+0

Это выглядит правильно, вы уверены, что они действительно вошли в систему? – Chap

+0

Да, они определенно попадают в систему (могут просматривать ранее недоступные страницы, изменять ссылку на ссылку на ссылку на страницу пользователя, изменять ссылку на запись в выводе и т. Д.). Ошибка возникает даже при входе пользователя из root. – Exupery

+0

Не могли бы вы разместить свой код контроллера сеанса? – PhillipKregg

ответ

13

Вместо того, чтобы пытаться перенаправить реферера, я установил бы сессии [: return_to]

Вам потребуется перед фильтром, который работает до вашей аутентификации на все ваши действия:

def store_return_to 
    session[:return_to] = request.url 
end 

Затем измените свой редирект только на

redirect_back_or_default() 
+0

Именно то, что я искал, это отлично работает! – Exupery

+0

Спасибо за это, мне потребовались часы, чтобы найти и другие ответы в StackOverflow не сработали. – kakubei

+0

Да. Это хорошее решение, отличное от разработчика. Это то, что мне было трудно найти, поэтому я решил, что буду вводить «не используя Devise» здесь, в комментариях, так что это легче найти! –

Смежные вопросы