0

我目前正在构建一个 rails 应用程序,使用设计 gem 进行身份验证。

目前在应用程序中只实现了客户端超时功能,我认为这不是一个好的最终解决方案。因为它不包括用户让他们的计算机进入睡眠状态的情况,只是为了 1 个例子。

所以我想在设计中实现超时模块,但是我面临着几个问题。问题是因为服务器端超时,用户需要导航到不同的页面,然后才能重定向到登录页面。当用户在 UI 中打开模式时,我的应用程序中有很多交互,这将触发 AJAX 调用(如果它们在服务器端超时,则会失败)。

以下是我想到的两种方法,但我不认为它们是好的解决方案,所以也许有人可以在其中一种方法的基础上构建或帮助我指出不同的方向:

1.) 在我的 AJAX 请求中,在“错误”回调中添加一个处理程序,如果错误回调返回 401 Unauthorized 响应,它将告诉用户刷新页面或转到登录页面。

缺点:应用程序中有很多这样的 ajax 请求,所以会有很多重复的代码,我认为这很难维护。

2.)向正文添加一个点击处理程序,每次触发时,向后端发送请求以验证用户是否仍然登录。如果他们没有将用户重定向到登录页面。

缺点:性能问题

任何意见,将不胜感激。谢谢。

4

2 回答 2

1

您可以从服务器站点添加它。

:expire_after: 120.minute

在您的初始化程序/session_store.rb 中,下面的示例。

Tastebook::Application.config.session_store :cookie_store, 
                            key: '_tastebook_app_session',
                            expire_after: 120.minute
于 2013-09-15T15:11:26.840 回答
0

我与另一位开发人员交谈,他帮助我想出了解决此问题的方法。

在客户端超时的情况下,我有一个从 15 分钟开始的倒计时计时器,这显然只有在用户的计算机没有睡着的情况下才有效。

因此,我创建了一个新的日期对象,而不是倒数计时器,将时间设置为未来 15 分钟(UTC)。然后我设置一个间隔,将当前日期时间 (UTC) 与未来日期对象进行比较,如果达到或超过它,它会呈现一条带有登录页面链接的消息。呈现此消息时,还会调用后端以终止用户会话,以涵盖用户尝试刷新浏览器的情况,这将导致他们被发送回登录页面。

于 2013-09-18T17:12:39.970 回答