Angular 在更改令牌后重新发送请求
Angular resend the request after change the token
我有身份验证拦截器和JWT身份验证。当令牌过期时,我得到 401,我需要发送请求以刷新令牌。刷新令牌后,我想重新发送用户请求,但它不起作用。
例如,要转到我的帐户选项卡,用户需要具有有效的令牌,他单击我的帐户并获取401,然后发送刷新令牌并将有效令牌保存在本地存储中。
现在我希望在此之后拦截器自动执行用户的操作,在这种情况下转到我的帐户,但我的方式不起作用,我该怎么做?
拦截器:
'responseError': function(rejection) {
var $state = $injector.get('$state');
var deffer = $q.defer();
if (rejection.status === 401) {
var $http = $injector.get('$http');
var AuthService = $injector.get('AuthService');
var user = store.get('user');
var cred = AuthService.refreshTokenValue(user.secretId, user.secretClient, user.refreshToken);
AuthService.getRefreshToken(cred).then(function(res) {
UserService.oAuth.accessToken = res.data.access_token;
// here i want to resend the request
return deffer.resolve(rejection);
});
}
return $q.reject(rejection);
}
你应该首先创建一个要返回的承诺对象,然后使用$http(rejection.config(重试请求,根据您的授权流程解决或拒绝承诺。
示例代码
var $state = $injector.get('$state');
var retryRequest = function($http, config, deferred) {
function successCallback(response) {
deferred.resolve(response);
}
function errorCallback(response) {
deferred.reject(response);
}
$http(config).then(successCallback, errorCallback);
}
if (rejection.status === 401) {
var deferred = $q.defer(); //moved deferred to here
var $http = $injector.get('$http');
var AuthService = $injector.get('AuthService');
var user = store.get('user');
var cred = AuthService.refreshTokenValue(user.secretId, user.secretClient, user.refreshToken);
AuthService.getRefreshToken(cred).then(function(res) {
UserService.oAuth.accessToken = res.data.access_token;
retryRequest($http, rejection.config, deferred);
// here i want to resend the request
return deffer.resolve(rejection);
});
return deferred.promise;
}
return $q.reject(rejection);
但您最好使用 httpBuffer 对请求进行排队,并在授权成功后重试所有请求
编辑:您可以使用类似这样的东西 https://github.com/witoldsz/angular-http-auth/blob/master/src/http-auth-interceptor.js
相关文章:
- 正在发送请求中包含数组的qx.io.request.Xhr请求
- phonegap上的Ajax调用未发送请求
- 通过C#向区块链服务发送请求时未定义XMLHttpRequest
- 向服务器发送请求以获取活动引导导航药丸
- 使用post启动模式发送请求
- jQuery在ajax发送请求时输入更改
- 如何规范向服务器发送请求
- 在zapier中发送请求数据时出现空指针异常
- 模板网址不起作用 - 不发送请求
- jQuery Ajax 不发送请求
- 我无法通过 POST 方法从 angularjs 向 php 发送请求
- 在关闭网页之前发送请求
- 让 jquery jqxhr 像已经在发送请求一样
- Angular 在更改令牌后重新发送请求
- 想要在节点.js中同步发送请求
- 从节点.js向 apache2.2.21 发送请求
- 设置属性但也发送请求的方法的正确名称
- 反应路由器如何从客户端向服务器中间件发送请求
- 向下滚动时的新 AJAX 请求
- 使用 JS 向 PHP 发送请求