【发布时间】:2017-10-12 07:11:58
【问题描述】:
我一直在尝试让我的刷新令牌工作一段时间,我希望我已经接近了。我的令牌刷新并触发随后的 200 调用,无论调用什么导致 401,但我页面上的数据没有刷新。
当访问令牌过期时,会发生以下情况:
在 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();
});
回到绘图板!
【问题讨论】:
-
你使用angularjs路由系统吗?
-
是的,用户界面路由器:github.com/angular-ui/ui-router
-
您是否尝试将 $state 服务注入您的
authInterceptorService并使用$state.reload()? -
@Julien 会这么简单吗?看起来像取消 return 语句并执行 state.reload 可能已经成功了。我已经坚持了一段时间,我会像使用 state.reload 一样运行它。有一次,我很满意它的工作原理(我不明白为什么不能),我很乐意接受你的建议作为答案!
-
@Julien 看起来好得令人难以置信,我可以在它空闲时使用 state.reload() 刷新我的下拉列表,但随后我在页面的工作流程中丢失了下拉列表在随后的基于 401 的重新加载中,需要重新启动工作流。
标签: asp.net angularjs oauth-2.0 jwt refresh-token