我一直试图让我的刷新令牌工作一段时间,我希望我已经接近了。我的令牌刷新并触发对任何导致 401 的调用的后续 200 调用,但我页面上的数据不会刷新。
当访问令牌过期时,会发生以下情况:
在 401 之后,GetListofCompanyNames 返回 200,其中包含使用正确更新的访问令牌的名称列表。但是,我的下拉菜单不会刷新。
我的拦截器:
app.factory('authInterceptorService',['$q', '$location', 'localStorageService', '$injector', function($q, $location, localStorageService, $injector) {
return {
request: function(config) {
config.headers = config.headers || {};
var authData = localStorageService.get('authorizationData');
if (authData) {
config.headers.Authorization = 'Bearer ' + authData.token;
}
return config;
},
responseError: function(rejection) {
//var promise = $q.reject(rejection);
var authService = $injector.get('authService');
if (rejection.status === 401) {
// refresh the token
authService.refreshToken().then(function() {
// retry the request
var $http = $injector.get('$http');
return $http(rejection.config);
});
}
if (rejection.status === 400) {
authService.logOut();
$location.path('/login');
}
return $q.reject(rejection);
}
};
}
]);
我关于 401 拒绝的返回声明在这里看起来很可疑,但我不确定用什么来代替它。因此我的问题是:当我拨打新电话时,如何让我的页面刷新它的数据?
更新:
当 200 返回时,这让我过去了,我可以得到一个下拉菜单来刷新,但是我失去了页面上的任何状态(例如选择的下拉菜单),如下所示。
authService.refreshToken().then(function() {
var $state = $injector.get('$state');
$state.reload();
});
回到绘图板!