[英]angular http interceptor not calling request again after token refresh
[英]Refresh Token in Interceptor before request is fired
把頭發拉出來。 如果用戶的訪問令牌即將到期,我想刷新訪問令牌。
authService.isUserLoggedIn()
返回一個promise並檢查用戶是否已登錄。 如果不是,則刷新用戶的訪問令牌。
但問題是authService.isUserLoggedIn()
是異步調用,在它返回值之前,攔截器將完成其作業,並且不會使用新標記填充Authorization標頭...
在腳本繼續之前,我一直在尋找一種等待承諾解決的方法。 不幸的是,我無法完成所需的任務。
碼:
.factory('SEHttpInterceptor', function($injector, ngWebApiSettings) {
return {
// optional method
'request': function(config) {
// add Authorization header if available
if (config.url.indexOf(ngWebApiSettings.apiServiceBaseUri) >-1){
var authService = $injector.get('authService2');
authService.isUserLoggedIn().then(function(response){
var authData = $injector.get('$localStorage').getObject("authorizationData");
config.headers.Authorization = 'Bearer ' + authData.token;
});
}
return config;
}
};
});
來自AngularJS $ http文檔 :
攔截器利用promise API來滿足同步和異步預處理的這種需求。
request
:使用http配置對象調用攔截器。 該函數可以自由修改配置對象或創建新對象。 該函數需要直接返回配置對象,或者包含配置或新配置對象的promise。
我假設你可以簡單地說:
'request': function(config) {
if (config.url.indexOf(ngWebApiSettings.apiServiceBaseUri) === -1){
return config;
}
var authService = $injector.get('authService2');
return authService.isUserLoggedIn().then(function(response){
var authData = $injector.get('$localStorage').getObject("authorizationData");
config.headers.Authorization = 'Bearer ' + authData.token;
return config;
});
}
感謝Oleg的建議,我設法讓這個工作。 答案是返回一個promise,我們在其中返回config
密鑰。
.factory('SEHttpInterceptor', function($injector, ngWebApiSettings) {
return {
// optional method
'request': function(config) {
// add Authorization header if available
if (config.url.indexOf('/Token')== -1 && config.url.indexOf(ngWebApiSettings.apiServiceBaseUri) >-1){
var authService = $injector.get('authService2');
return authService.isUserLoggedIn().then(function(response){
var authData = $injector.get('$localStorage').getObject("authorizationData");
config.headers.Authorization = 'Bearer ' + authData.token;
return config;
});
}
return config;
}
};
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.