Angularjs 未授权时如何重新发送请求
我实现了authInterceptorService,所以当响应未经授权时,我发送新令牌的请求,然后我想重新发送previoes请求。所以我需要将它存储在某个地方并重新发送,最好的方法是什么Angularjs 未授权时如何重新发送请求,angularjs,Angularjs,我实现了authInterceptorService,所以当响应未经授权时,我发送新令牌的请求,然后我想重新发送previoes请求。所以我需要将它存储在某个地方并重新发送,最好的方法是什么 var _responseError = function (rejection) { if (rejection.status === 401) { var authService = $injector.get('authService');
var _responseError = function (rejection) {
if (rejection.status === 401) {
var authService = $injector.get('authService');
var authData = localStorageService.get('authorizationData');
if (authData) {
authService.refreshToken().then(function (response) {
//redirect to original request
},
function (err) {
$location.path('/login');
});
}
authService.logOut();
$location.path('/login');
}
return $q.reject(rejection);
}
为什么不提出自己的要求呢
// define the original request
var originalRequest = function( some input ){
$http.post( 'url' , data ).then(onSuccess, _responseError);
}
然后在_responseError函数中,只需调用原始请求
var _responseError = function (rejection) {
if (rejection.status === 401) {
var authService = $injector.get('authService');
var authData = localStorageService.get('authorizationData');
if (authData) {
authService.refreshToken().then(function (response) {
//redirect to original request
originalRequest( some input );
},
function (err) {
$location.path('/login');
});
}
authService.logOut();
$location.path('/login');
}
return $q.reject(rejection);
}
此外,在失败时,您会得到请求的原始配置,因此您可以使用该配置
if (authData) {
authService.refreshToken().then(function (response) {
//redirect to original request
$http.post(rejection.config).then( ... , ... );
},
function (err) {
$location.path('/login');
});
}
失败时,您可以在错误响应中获得失败调用的配置,您可以重用该配置。或者,您可以将第一个请求设置为函数并独立调用它。请看下面。当然我不能以这种方式发布配置$http.post(rejection.config)。好吧,您需要查看配置并提取所需的数据。