angularjs中的$ resource invalidation

时间:2014-03-23 06:50:50

标签: angularjs angularjs-scope

我有这个用例,我将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();

但没有帮助

1 个答案:

答案 0 :(得分:1)

这是因为当工厂代码执行时,令牌被分配一次。试试这个:

get : { method: 'GET', headers: {
    'X-AUTH-TOKEN': function(){
        return 'authToken=' + localStorageService.get("authToken");
    }
}}