2016-09-27 70 views
0

我有一个阵营应用呈现的客户端,其中我处理验证方式如下:处理验证要阵营应用

  1. 一旦加载,该应用触发一个AJAX请求到后端,基本上询问用户的会话是否有效;
  2. 它使用服务器的响应更新应用程序的状态;
  3. 它相应地呈现“/”路线(如果会话无效则为主页,如果有效,则为仪表板)。

(也许有在前端应用程序处理这个更好的解决方案,我所有的耳朵,如果你有想法)

这工作得很好,但引入服务人员混进去,并试图将应用程序变成离线优先的渐进式网络应用程序似乎...很复杂。

一方面,如果我不缓存“我登录了吗?”请求和应用程序处于脱机状态,应用程序将始终呈现主页。另一方面,如果我缓存了AJAX请求,用户最终将看到一个空的仪表板,因为他们的会话已经过期,服务器将投掷403s。

有没有办法有效处理这个问题?

回答

4

我通过采取不同的方法解决了我的问题:我现在坚持localStorage中的状态。

这样,当用户到达应用程序时,他会看到他上次访问时的陈旧数据。同时,“我登录了吗?”请求在后台被触发。

  • 如果它是成功的,并返回true,其他的AJAX请求被解雇,并填写与新的数据应用;
  • 如果成功并返回false,状态会相应更新并且用户重定向到主页;
  • 如果请求不成功(即应用程序处于脱机状态),应用程序会持续显示仪表板中上次会话的陈旧数据。我们不知道用户的会话是否仍然有效,但我们无法检索任何数据,因此无关紧要。
1

这样做的一种方法是在后端api中添加/ verifyToken(假设您使用某种令牌来验证会话),以检查令牌是否有效。

所以你缓存你的会话令牌。如果应用程序处于脱机状态,则会显示仪表板。

如果应用程序处于在线状态,则会向/ verifyToken发出请求以检查会话是否仍然有效。如果是,那么你继续仪表板。如果不是,您将它们重定向回主页(或登录页面)。

编辑: 当您的应用程序处于在线状态时,您可以从技术上向任何授权路线发出请求,并检查响应是否为403(以防您无法修改后端)。如果是,那么你可以发回他们登录页面。

+0

对,这个“接收403s时的回退”解决方案似乎是一个体面的修复。 但我希望会有一个更加服务人员,具体的解决方案,就像一个方式,而无需用户... 显示的网页或在什么应该是一个应用程序的登录表单交互更新会话看来我错了。 – Bertrand

+0

那么,你还可以做什么刷新你的令牌?所以你检查令牌,如果它不是一个有效的令牌,你忽略它。但是,如果它是一个过期的标记,你可以生成一个新的标记并使用它。 这又取决于您是否有权访问后端api来进行更改,或者您的后端api是否支持它。 –