我在我的应用程序中创建了一个检测会话丢失的拦截器(服务器发送HTTP 419).在这种情况下,我需要从服务器请求一个新会话,然后我想再次自动发送原始请求.
也许我可以在请求拦截器中保存请求,然后再次发送它,但可能有一个更简单的解决方案.
请注意,我必须使用特定的Web服务来创建会话.
angular.module('myapp', [ 'ngResource' ]).factory(
'MyInterceptor',
function ($q, $rootScope) {
return function (promise) {
return promise.then(function (response) {
// do something on success
return response;
}, function (response) {
if(response.status == 419){
// session lost
// create new session server-side
// Session.query();
// then send current request again
// ???
}
return $q.reject(response);
});
};
}).config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('MyInterceptor');
});
Run Code Online (Sandbox Code Playgroud) 我试图拦截401和403错误刷新用户令牌,但我不能让它运作良好.我所取得的就是这个拦截器:
app.config(function ($httpProvider) {
$httpProvider.interceptors.push(function ($q, $injector) {
return {
// On request success
request: function (config) {
var deferred = $q.defer();
if ((config.url.indexOf('API URL') !== -1)) {
// If any API resource call, get the token firstly
$injector.get('AuthenticationFactory').getToken().then(function (token) {
config.headers.Authorization = token;
deferred.resolve(config);
});
} else {
deferred.resolve(config);
}
return deferred.promise;
},
response: function (response) {
// Return the promise response.
return response || $q.when(response);
},
responseError: function (response) {
// Access token invalid …Run Code Online (Sandbox Code Playgroud)