ruby rails - 重定向到原始请求网址

时间:2012-04-07 06:59:59

标签: ruby-on-rails ruby ruby-on-rails-3

以下是重定向到默认网址(myapp_url)的内容。但是我希望更改重定向以进行身份​​验证后用户输入的请求网址。 我怎么做?我在这里搜索了几个选项,比如:back。但是没有去。

用户输入网址,如果未经过身份验证,则会被重定向到登录页面,然后登录后,用户将被重定向到原始请求网址。

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

2 个答案:

答案 0 :(得分:13)

您可以阅读Michael Hartl撰写的“Ruby on Rails教程”中的the chapter about "Friendly forwarding",了解如何轻松实现它。

基本上你有3个辅助方法:

  1. store_location将用户所需的位置存储在会话中
  2. redirect_back_or(url)将用户重定向到会话中存储的位置,如果未设置,则重定向到url方法参数
  3. 中包含的位置
  4. clear_return_toredirect_back_or方法中使用“内部”,以便在使用后清除此信息
  5. 然后你使用这些方法:

    A)当您看到访客用户尝试访问需要使用store_location身份验证的页面,然后再将其重定向到登录页面。
     B)当用户登录时,您使用redirect_back_or(url)将他重定向到正确的位置(如果当前存在)

    这是对这项工作的概述,你得到了这个想法,但我建议阅读该章的实施(少数)细节。

答案 1 :(得分:1)

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