【问题标题】:Conditional sign out in Rails app using Devise在 Rails 应用程序中使用 Devise 有条件地退出
【发布时间】:2012-10-02 21:12:07
【问题描述】:

我正在创建一个 Rails 应用程序,用户可以在其中登录并查看各个页面。有些是私人的,有些是公开的。如果用户在查看私人页面时退出,他应该被重定向到 root_path。如果用户在查看公共页面时退出,他应该被重定向到同一个页面(在他退出后,呈现方式会略有不同)。

我想在 application_controller 的 after_sign_out_path_for(resource_or_scope) 方法中使用条件语句来执行此操作。问题是通常从 pages_controller 文件访问的 @page 变量在此范围内为 nil 和/或不可用。在会话被销毁后,从不同的控制器访问此变量(最后加载的页面)的最佳方法是什么?

谢谢。

【问题讨论】:

  • 后续问题:有什么方法可以使用resource_or_scope参数将页面的引用传递给方法吗?

标签: ruby-on-rails ruby-on-rails-3 session devise


【解决方案1】:

您可以跟踪会话变量中的最后一页并添加前置过滤器以使其在页面控制器中保持最新。

session[:last_page_visited] = @page

您还可以访问request.referrer,这将为您提供他们退出的页面的 URL。不确定您是否可以从中确定私有/公共,也许使用正则表达式?

【讨论】:

  • 谢谢你!最终使用 request.referrer 和一些正则表达式,因为会话在用户退出后被销毁。
猜你喜欢
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多