首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向角$resource请求添加标头

向角$resource请求添加标头
EN

Stack Overflow用户
提问于 2015-07-24 10:43:04
回答 2查看 2.4K关注 0票数 2

我正在尝试向access发送的所有http请求(用于访问REST服务器的$resource)添加一个头,以添加基本的Auth信息(来自用户输入的用户名/密码)。

我认为当用户点击登录按钮时,它就像$http.defaults.headers.common['Authorization'] = value;一样简单(其中值是正确格式化的auth信息),但是当请求被发送时,会返回403个未经授权的请求,并检查Chrome的网络选项卡中的请求,不会在简单的资源查询上设置标题。

我已经搜索了很长一段时间了,有几个问题提到了CORS是问题所在(事实并非如此,我在服务器端设置了正确的标题,并且还尝试使用chrome关闭web安全运行,以反复检查这是否有干扰)。其他答案建议使用拦截器,但在我看来,对于如此简单的任务(虽然这是我想我必须使用的唯一方法),这似乎是过度设计的。

编辑:其他信息:我确信CORS不是问题,因为不需要身份验证的服务器请求成功并返回预期的响应。这是授权头设置不正确(或根本不正确)的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-24 12:49:35

最佳实践是创建一个Http请求拦截器,并在那里添加授权头。

代码语言:javascript
运行
复制
angular.module("MyApp").factory("authHttpRequestInterceptor", ["authenticationDataService",
   function (authenticationDataService) {

       return {

           request: function (config) {
               // This is the authentication service that I use.
               // I store the bearer token in the local storage and retrieve it when needed.
               // You can use your own implementation for this
               var authData = authenticationDataService.getAuthData();

               if (authData && authData.accessToken) {
                   config.headers["Authorization"] = 'Bearer'+ authData.accessToken;
               }

               return config;
   }
};
}]);

之后,在主模块中注册拦截器:

代码语言:javascript
运行
复制
angular.module("MyApp").config([
   "$httpProvider", function ($httpProvider) {
       $httpProvider.interceptors.push('authHttpRequestInterceptor');
   }]);
票数 3
EN

Stack Overflow用户

发布于 2015-07-24 22:29:35

您可以使用transformRequest.maybe,您可以使用$httpProvider.interceptors,您可以使用$resource,尝试使用它的属性,它可以帮助您。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31608486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档