我在Rails 3应用程序中使用了设计。我想抑制某些功能(url)的"会话超时"检查。有什么设置可以这样做吗?
一般来说,任何不需要身份验证的函数都不应该超时(因为,实际上,不需要会话)。
同样,当我通过电子邮件向用户发送链接时,我不希望该链接被会话超时错误阻塞。
最后——很明显——登录和注销函数不应该因为会话超时错误而失败。
我们的应用程序现在有所有这些症状。是否有一个"skip_before_filter"缺失?
谢谢。
EDIT:场景详细信息
(1)用户在会话中,然后关闭浏览器。之后,他们打开浏览器进入登录页面并登录。身份验证后,他们得到一个"会话超时"错误消息,并返回到登录页面!!
如果用户正在登录,我想忽略任何"Session Timeout"错误。
(2)用户处于会话状态,但超过了超时时间。他们点击电子邮件中的链接,进入我们的应用程序。应用程序抛出"会话超时"错误消息,并将它们带到登录页面,而不是链接目的地。(如果他们再次点击电子邮件中的链接[没有会话在播放],应用程序继续处理链接,没有错误。)
我想忽略任何"会话超时"错误,如果用户正在遵循一个包含有效(单次使用)令牌的链接,他们通过电子邮件收到。
(3)用户处于会话状态,但超时后处于空闲状态。他们点击网页上的"退出"链接。应用程序终止会话,返回到登录页面,但显示"会话超时"错误消息。
我想忽略任何"Session Timeout"错误如果用户正在注销。
(4)用户处于会话状态,但超时后处于空闲状态。它们转到不需要身份验证的功能(例如,帮助页面、信息显示等)。应用程序抛出"会话超时"错误并终止会话。他们试图再次进入该功能,并且不受干扰地继续进行。
我不希望"Session Timeout"错误中断到不需要身份验证的页面的导航。
所有这些函数都被标记为不受authenticate user before_filter的约束。但是,仍然应用会话超时检查。
如何防止某些函数/方法的会话超时错误?
class User < ActiveRecord::Base
devise (...), :timeoutable
def timeout_in
if self.admin?
1.year
else
2.days
end
end
end
如果存在会话超时,显然您的用户将被重定向到登录页面。对于所有需要身份验证的方法,您应该使用before_filter :authenticate_user!
。
至于你的电子邮件,我想你可以使用令牌