我已经看到很多关于将用户重定向到他使用设计的最后一页的问题。有一个很好的解释和示例代码here
这对我有用,这是我有时想要的,但有时候,我希望重定向到用户试图访问的受限页面而不是他之前所在的页面。例如:
答案 0 :(得分:2)
所以我意识到,为了重定向到用户在登录后尝试访问的受保护页面,store_location函数需要是before_filter而不是after_filter。
before_filter :store_location
def store_location
# store last url as long as it isn't a /users path
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
end
def after_sign_in_path_for(resource)
session[:previous_url] || root_path
end
这是有道理的,因为会话变量在这种情况下被设置为受保护的页面,因为当我尝试访问new_post_path
时就执行了store_location函数。当你将store_location作为像github代码示例中的after_filter一样,那么执行store_location函数的最后一次是当我遇到非受保护的动作时,即我的示例中的主页。
答案 1 :(得分:0)
使用以下代码段重定向到登录页面之前设置当前路径:
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
成功登录后检查此会话变量,如果已设置,然后重定向到该变量。