【问题标题】:logout should redirect to :back unless :back requires a user注销应重定向到 :back 除非 :back 需要用户
【发布时间】:2010-08-23 05:16:00
【问题描述】:

单击注销时,我想重定向回用户所在的页面,除非该页面需要用户登录。

场景 1 - “返回”需要用户 1)用户从用户帐户页面单击注销 2) 重定向(最终)到 root_path

场景 2 - “返回”不需要用户 1) 用户从(非用户要求的)事件页面单击注销 2) 重定向(最终)到 events_path

有人建议我更新我的 before_filter :require_use 方法是这样的:

  def require_user
    unless current_user
      flash[:notice] = "You must be logged in to view this page"
      redirect_to user_coming_from_logout_method? root_path : login_path
    end 
  end 

除非我无法定义#user_coming_from_logout_method?

有人可能会认为它只是:

request.referrer == "/logout"

但在上面的例子中 request.referrer 实际上 == "/user_account",而不是中间的注销方法。很奇怪,我知道。

建议?

【问题讨论】:

    标签: ruby-on-rails authlogic


    【解决方案1】:

    我不认为您可以依靠浏览器在重定向上设置引荐来源网址。 This thread 详细讨论了这个问题。

    也许在注销控制器中的session 中设置一些内容,您可以对其进行测试然后在require_user 方法中清除?

    【讨论】:

    • 不要认为这适用于场景 2 - 在这种情况下,用户永远不会点击 #require_user 方法,因此永远不会清除此会话内容。它会被悬空,可能会导致一些意想不到的事情发生。
    • ..除非你也有 require_no_user 方法?
    • 这不是意味着每个方法都必须 require_user 或 require_no_user 吗?事实并非如此。我想我可以添加一个 after_filter 来清除会话的东西——不过那是史诗般的矫枉过正。
    • 好点...问题并不像乍一看那么简单
    猜你喜欢
    • 2014-02-26
    • 2015-08-19
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多