设计 - 我可以绕过超时检查吗?

时间:2014-03-15 05:30:11

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

我在我的Rails 3应用程序中使用了Devise。我想抑制"会话超时"检查某些功能(网址)。是否有应该这样做的设置?

通常,任何不需要身份验证的功能都不应超时(因为实际上不需要会话)。

同样,当我通过电子邮件向用户发送链接时,我不希望会话超时错误阻止该链接。

最后 - 显然 - 由于会话超时错误,登录和注销功能永远不会失败。

我们的应用程序现在具有所有这些症状。是否有" skip_before_filter"丢失?

感谢。


编辑:情景详情

(1)用户正在进行会话,然后关闭浏览器。之后,他们将浏览器打开到登录页面并登录。经过身份验证后,他们会得到一个会话超时"错误消息并返回登录页面!!

我想忽略任何"会话超时"错误如果用户正在登录

(2)用户正在进行会话,但超出了超时期限。他们点击电子邮件中的链接,将其带入我们的应用程序。应用程序抛出会话超时"错误消息并将它们带到登录页面而不是链接目标。 (如果他们再次单击电子邮件中的链接[没有正在进行的会话],应用程序将继续处理该链接,而不会出错。)

我想忽略任何"会话超时"错误如果用户正在关注包含他们通过电子邮件收到的有效(一次性)令牌的链接。

(3)用户正在进行会话,但超时超时。他们点击"退出"网页上的链接。应用程序终止会话,返回登录页面,但显示"会话超时"错误信息。

我想忽略任何"会话超时"如果用户退出,则出现错误

(4)用户正在进行会话,但超时超时。它们转到不需要验证的功能(例如,帮助页面,信息显示等)。应用程序抛出会话超时"错误并终止会话。他们试图再次使用该功能,不间断地继续。

我不想要"会话超时"错误中断导航到不需要身份验证的页面

所有这些功能都被标记为免除身份验证用户 before_filter。但是,会话超时检查仍然适用。

如何防止某些功能/方法的会话超时错误?

1 个答案:

答案 0 :(得分:0)

class User < ActiveRecord::Base
  devise (...), :timeoutable

  def timeout_in
    if self.admin? 
      1.year
    else
      2.days
    end
  end
end

如果会话超时,显然您的用户将被重定向到登录页面。并且您应该将before_filter :authenticate_user!用于需要身份验证的所有方法。

至于你的电子邮件,我想你可以使用令牌