【问题标题】:Devise: Redirect to the restricted page the user was originally trying to access设计:重定向到用户最初尝试访问的受限页面
【发布时间】:2013-03-06 06:40:29
【问题描述】:

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

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

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

【问题讨论】:

  • GitHub 上的示例代码完全符合您的描述!?
  • 我已经测试过了。它重定向到用户所在的最后一页,而不是他试图访问的那个。 IE。在我的示例中,示例代码会将用户重定向到主页而不是新的帖子页面。
  • 所以你应该只在用户试图访问受限页面时设置这个会话变量?

标签: ruby-on-rails devise


【解决方案1】:

所以我意识到,为了重定向到用户在登录后尝试访问的受保护页面,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

这是有道理的,因为在这种情况下会话变量被设置为受保护的页面,因为 store_location 函数在我尝试访问 new_post_path 时正确执行。当你在 github 代码示例中将 store_location 作为 after_filter 时,最后一次执行 store_location 函数是在我到达非受保护操作时,即我的示例中的主页。

【讨论】:

  • 非常感谢!使用您引用的建议代码后,我遇到了完全相同的问题。发现任何将其设为 before_filter 会导致任何问题的情况?现在你已经解释过了,看起来很明显,为什么他们给出的例子中没有呢?
【解决方案2】:

在重定向到登录页面之前使用以下sn-p设置当前路径:

session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多