11

这是我用于重定向到默认 url(myapp_url) 的内容。但我想更改重定向以转到用户在身份验证后输入的请求 url。我怎么做?我尝试了从此处搜索的几个选项,例如:back。但是不行。

用户输入一个 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
4

2 回答 2

15

您可以阅读Michael Hartl 的“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)将他重定向到正确的位置(当然如果存在)

这是对其工作原理的概述,您明白了,但我建议阅读该章以了解实现(很少)细节。

于 2012-04-07T16:08:39.110 回答
1

您需要在身份验证重定向之前保存会话中的路径,并在成功进行身份验证后重定向到该路径。

于 2012-04-07T07:06:04.920 回答