2012-04-07 2 views
9

Вот что у меня есть для перенаправления на url по умолчанию (myapp_url). Но я хочу изменить перенаправление, чтобы перейти к запросу. URL был введен пользователем после аутентификации. Как это сделать? Я попробовал пару вариантов от поиска здесь, например: назад. Но не уходи.ruby ​​rails - перенаправить на исходный запрос url

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

def create 
    user = User.Authenticate(params[:user_id], params[:password]) 
if user 
    session[:user_id] = user.id 
    redirect_to myapp_url, :notice => "Logged in!" 
else 
    flash.now.alert = "Invalid email or password" 
    render "new" 
    end 

end 
+0

Вы нашли решение? –

+0

@ Aldo'xoen'Giambelluca - Пока нет. –

+0

Этот раствор работал для меня: http://stackoverflow.com/questions/9835365/devise-how-to-redirect-to-different-page-based-on-some-parameter-after-sign-in – rassom

ответ

1

Необходимо сохранить путь в сеансе перед перенаправлением при аутентификации и после успешного перенаправления на этот путь.

+0

I Пробовал это, но не повезло. 'session [: return_to] || = request.referer'' redirect_to session [: return_to] ' –

12

Вы можете прочитать the chapter about "Friendly forwarding" в «Руководстве по Ruby on Rails» Майкла Хартля, чтобы узнать, как вы можете легко его реализовать.

В основном у вас есть 3 вспомогательные методы:

  1. store_location для хранения пользователя нужное место в сеансе
  2. redirect_back_or(url) перенаправлять пользователя к местоположению, хранящемуся в сессии или, если не установлено, на месте содержащийся в url методе парах
  3. и clear_return_to используется «внутри» метод redirect_back_or, чтобы очистить эту часть информации когда-то

А затем использовать эти методы:

A), когда вы видите гостевой пользователь пытаются получить доступ к странице, которую необходимо использовать аутентификацию store_location, прежде чем перенаправить его на страницу входа в систему.
B), когда пользователь вошел в систему, вы используете redirect_back_or(url) перенаправить его в нужное место (если конечно)

Это обзор того, как это работает, вы получите эту идею, но я предлагаю, чтобы прочитать, что глава для реализации (несколько) деталей.

+0

Можно ли это реализовать с помощью почтового запроса? Скажите, что вы отправляете форму, и сеанс истек до подачи. Пример Майкла Хартлса вызовет ошибку маршрутизации. Я думаю, Rails будет пытаться получить запрос после входа в систему. Например, скажем, что у вас есть «Сообщения» и «комментарии», где комментарии вложены в сообщениях, а комментарии появляются из показа сообщений #. Получившийся URL-адрес после входа в систему будет «app.com/posts/1/comments», вызывающим ошибку маршрутизации, что не было бы, если бы запрос был POST. – Mohamad

+1

Перенаправления отправляются браузером в виде запросов GET. Даже если у вас есть браузер для перенаправления в качестве POST, исходные данные представления формы не будут предоставлены. – kgilpin

+0

Ссылка на учебник в ответ мертва, вот обновленная ссылка: https://www.railstutorial.org/book/_single-page#sec-friendly_forwarding – Nilloc

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