如何将标头动态传递给 angularjs 的 $resource

Posted

技术标签:

【中文标题】如何将标头动态传递给 angularjs 的 $resource【英文标题】:How to pass headers on the fly to $resource for angularjs 【发布时间】:2014-11-04 10:27:04 【问题描述】:

现在,我知道为 angularjs 调用动态设置标头中的令牌的唯一方法是通过 $http 像这样:

return $http.get(
  url: 'https://my.backend.com/api/jokes',
  params: 
    'jokeId': '5',
  ,
  headers: 
    'Authorization': 'Bearer '+ $scope.myOAuthToken
  
);

但我想弄清楚如何通过 $resource 传递这个,这里有一些伪代码不起作用:

...
.factory('myFactory',
  ['$resource',
    function($resource)
      return 
        jokes: $resource('https://my.backend.com/api/jokes', null, 
          query: 
            method: 'GET'
          
        )
      ;
    
  ]
);
...
return myFactory.jokes.query(
  'jokeId': '5',
  'headers': 
    'Authorization': 'Bearer '+ $scope.myOAuthToken
  
);

如何将标头即时传递给 angularjs 的 $resource?

【问题讨论】:

【参考方案1】:

我认为这不能按照您尝试的方式完成,因为配置对象在操作方法上不可用。但是动作配置方法有它。因此,您可以做的是,而不是直接返回资源,而是创建一个以授权令牌为参数的函数,然后构造资源并返回。

return 
    jokes: function (token) 
        return $resource('https://my.backend.com/api/jokes', null, 
            query: 
                method: 'GET',
                headers: 
                    'Authorization': 'Bearer ' + token
                
            
        )
    
;

然后调用服务函数为:

myFactory.jokes($scope.myOAuthToken).query('jokeId': '5');

【讨论】:

我试过了,效果很好!谢谢@Chanermani!示例代码:sample.factory('Restricted', ['$resource', function($resource) return createRestrictedResource: function(token) return $resource('/api/v1/restricted', null, query: headers: 'Authorization': 'Bearer ' + token); ]);

以上是关于如何将标头动态传递给 angularjs 的 $resource的主要内容,如果未能解决你的问题,请参考以下文章

将动态URL值传递给角度js控制器

Vuejs将动态数据从父组件传递给子组件

如何将参数和标头传递给 aiohttp ClientSession

如何通过 AngularJS 传递 JsonWebToken(JWT)

如何将请求标头信息传递给 Angular6 应用程序(JWT 通过请求标头发送)

如何将值从angularjs传递给节点[重复]