设计:重定向到用户最初尝试访问的受限页面

时间:2013-03-06 06:40:30

标签: ruby-on-rails devise

我已经看到很多关于将用户重定向到他使用设计的最后一页的问题。有一个很好的解释和示例代码here

这对我有用,这是我有时想要的,但有时候,我希望重定向到用户试图访问的受限页面而不是他之前所在的页面。例如:

  1. 用户点击主页上的“创建新帖子按钮”
  2. 这会命中posts控制器,新操作受到需要用户登录的before_filter的保护
  3. 用户被重定向到登录页面
  4. 登录后,用户现在被重定向到主页。
  5. 但是,在这种情况下,我希望用户可以使用他尝试访问的新帖子重定向到新操作,而不是主页。

2 个答案:

答案 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/

成功登录后检查此会话变量,如果已设置,然后重定向到该变量。