我目前正在构建一个rails应用程序,使用设计gem进行身份验证。
目前在应用程序中只实现了客户端超时功能,我认为这不是一个好的最终解决方案。因为它不包括用户仅举 1 个示例将其计算机置于睡眠状态的情况。
所以我想在 deve 中实现超时模块,但是我面临着几个问题。这些问题是因为使用服务器端超时,用户需要导航到其他页面,然后才能重定向到登录页面。当用户在 UI 中打开模式时,我的应用程序中有很多交互,这将触发 AJAX 调用(如果它们在服务器端超时,则会失败)。
以下是我想到的 2 种方法,但我不认为它们是好的解决方案,所以也许有人可以基于其中一种方法或帮助我指出不同的方向:
1.) 在我的 AJAX 请求中,在"错误"回调中添加一个处理程序,如果错误回调返回 401 未授权响应,它将告诉用户刷新页面或转到登录页面。
缺点:应用程序中有很多这样的ajax请求,所以会有很多重复的代码,我认为这很难维护。
2.) 向正文添加一个点击处理程序,每次触发时,向后端发送请求以验证用户是否仍处于登录状态。如果他们没有将用户重定向到登录页面。
缺点: 性能问题
任何建议将不胜感激。谢谢。
您可以从服务器站点添加此内容。
:expire_after: 120.minute
在你的初始值设定项/session_store.rb 中,下面的示例。
Tastebook::Application.config.session_store :cookie_store,
key: '_tastebook_app_session',
expire_after: 120.minute
我与另一位开发人员进行了交谈,他帮助我想出了这个问题的解决方案。
使用客户端超时,我有一个从 15 分钟开始的倒数计时器,这显然仅在用户的计算机未进入睡眠状态时才有效。
因此,我创建了一个新的日期对象,而不是倒数计时器,将时间设置为将来的 15 分钟 (UTC)。然后我设置了一个间隔,将当前日期时间 (UTC) 与未来日期对象进行比较,如果已达到或超过它,它会呈现一条消息,其中包含指向登录页面的链接。呈现此消息时,还会调用后端以终止用户会话,以覆盖用户尝试刷新浏览器的情况,这将导致它们被发送回登录页面。