在触发请求之前刷新侦听器中的令牌
Refresh Token in Interceptor before request is fired
把
我的头发拔掉了。如果用户的访问令牌即将过期,我想刷新访问令牌。
authService.isUserLoggedIn()
返回一个承诺并检查用户是否已登录。如果不是,则正在刷新用户的访问令牌。
但是,问题是authService.isUserLoggedIn()
是异步调用,在返回值之前,拦截器将完成其作业,并且授权标头将不会填充新令牌...
我一直在寻找一种方法来等待承诺解决,然后再继续脚本。不幸的是,我无法完成所需的内容。
法典:
.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 文档:
拦截器利用承诺 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;
});
}
多亏
了奥列格的建议,我设法让它工作。答案是返回一个承诺,在该承诺中,我们返回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;
}
};
})
相关文章:
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- jQuery将侦听器的大小调整为只触发宽度的变化
- javascript删除事件侦听器
- 我应该/如何清除mousemove JQuery事件侦听器
- 在JQuery中使用谷歌地图Api事件/侦听器
- 如何在侦听器之后添加可拖动功能
- 如果侦听器附加到父元素,是否可以区分单击发生在哪个子元素上
- 如何在侦听器中调用变量
- 在触发请求之前刷新侦听器中的令牌