我有这个用例,我将authToken传递给每个请求,每次登录时此标记都会更改。
app.factory('Comment', function ($resource, localStorageService, $cacheFactory) {
return $resource('http://localhost:port/comments/:id', {"id":"@id", port:':9000'}, {
query: { method:'GET', isArray: true , headers: {'X-AUTH-TOKEN':'authToken='+localStorageService.get("authToken")}},
save: { method:'POST',headers: {'X-AUTH-TOKEN':'authToken='+localStorageService.get("authToken")}},
update: {method:'PUT' ,headers: {'X-AUTH-TOKEN':'authToken='+localStorageService.get("authToken")}},
delete : {method: 'DELETE',headers: {'X-AUTH-TOKEN':'authToken='+localStorageService.get("authToken")}},
get : { method: 'GET', headers: {'X-AUTH-TOKEN':'authToken='+localStorageService.get("authToken")}}
});
我看到的行为是,如果authToken由于某种原因发生更改,$ resource会在发送请求时继续添加先前的authToken。我正在使用$ http直接登录以及我正在使用$ resource的任何评论相关的东西。我错过了什么吗?
登录后我确保我的localStorage有新创建的令牌,但请求正在使用之前的authToken,直到我刷新页面,之后它添加了正确的头我知道$ resource使用某种缓存并试图登录后,删除这样的$ http缓存。
$cacheFactory.get('$http').removeAll();
但没有帮助
答案 0 :(得分:1)
这是因为当工厂代码执行时,令牌被分配一次。试试这个:
get : { method: 'GET', headers: {
'X-AUTH-TOKEN': function(){
return 'authToken=' + localStorageService.get("authToken");
}
}}