以下是重定向到默认网址(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
答案 0 :(得分:13)
您可以阅读Michael Hartl撰写的“Ruby on Rails教程”中的the chapter about "Friendly forwarding",了解如何轻松实现它。
基本上你有3个辅助方法:
store_location
将用户所需的位置存储在会话中redirect_back_or(url)
将用户重定向到会话中存储的位置,如果未设置,则重定向到url
方法参数clear_return_to
在redirect_back_or
方法中使用“内部”,以便在使用后清除此信息然后你使用这些方法:
A)当您看到访客用户尝试访问需要使用store_location
身份验证的页面,然后再将其重定向到登录页面。
B)当用户登录时,您使用redirect_back_or(url)
将他重定向到正确的位置(如果当前存在)
这是对这项工作的概述,你得到了这个想法,但我建议阅读该章的实施(少数)细节。
答案 1 :(得分:1)
您需要在身份验证重定向之前保存会话中的路径,并且在成功验证重定向到此路径之后。