Chr*_*zak 7 javascript angularjs
把头发拉出来.如果用户的访问令牌即将到期,我想刷新访问令牌.
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;
}
};
});
Run Code Online (Sandbox Code Playgroud)
感谢奥列格的建议,我成功地完成了这项工作。答案是返回一个承诺,在这个承诺内我们返回密钥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;
}
};
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |