我目前正在开发一个使用JWT对所有REST调用进行身份验证的Web应用程序。我们遇到的问题是,当客户执行需要REST调用的操作并且JWT因任何原因而过期时。在那一刻,它应该回应401响应。
我正在寻找的功能是拦截401错误,刷新JWT,并重试请求而不向用户发送错误的一些方法。
应用程序在AngularJS上运行,并使用Restangular来处理所有其余的调用。到目前为止,我一直在密切关注set here和Restangular文档中的setErrorInterceptor。使用该发布代码的版本,我可以成功重新发送请求,并且在.then()部分中我得到了成功的响应。但是,从文档中可以看出,这种方法只能返回false或true,所以我无法得到它。
目前我们有一个计时器,它基本上将jwt到期时间与当前系统时间进行比较,并在到期前剩余60秒时刷新jwt。当用户的系统时钟与服务器时钟相比关闭时,这会导致问题,导致令牌无法刷新,因为应用程序认为有更多时间。
具体的解决方案就是获取系统时间,与服务器时间进行比较并创建偏移变量,但这并不能涵盖可能出错的所有基础。另一个话题是,在每个请求都不可行之前检查JWT。
在Restangular的拦截器中有没有办法完成错误拦截和重发?如果没有,是否有其他方法呢?