Devise 的服务器端超时问题



我目前正在构建一个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) 与未来日期对象进行比较,如果已达到或超过它,它会呈现一条消息,其中包含指向登录页面的链接。呈现此消息时,还会调用后端以终止用户会话,以覆盖用户尝试刷新浏览器的情况,这将导致它们被发送回登录页面。

相关内容

  • 没有找到相关文章

最新更新