Angularjs设置授权标头

Posted

技术标签:

【中文标题】Angularjs设置授权标头【英文标题】:Angularjs set a authorization header 【发布时间】:2015-12-02 05:00:54 【问题描述】:

我试图在我的请求中添加一个授权标头,但它不起作用。

我正在使用这个:

var config = headers: 
  'Authorization': token
  
;
return $http.get('http://localhost:3000/apis/users/all', config);

我也试过这个:

$http.defaults.headers.common['Authorization'] = token;

但是对于这两种情况,我在后端请求中都得到了这个标头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:es-ES,es;q=0.8,ca;q=0.6,en;q=0.4,gl;q=0.2
Access-Control-Request-Headers:accept, authorization
Access-Control-Request-Method:GET
Connection:keep-alive
Host:localhost:3000
Origin:http://localhost:8000
Referer:http://localhost:8000/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4)         AppleWebKit/537.36 (Khtml, like Gecko) Chrome/45.0.2454.85 Safari/537.36

我需要这样的东西:

Authorization: token

但我得到了这个:

Access-Control-Request-Headers:accept, authorization

那么,我在任何地方都没有令牌值。

我将 expressjs 用于后端,并将其用于 CORS:

app.use(function(req, res, next) 
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
    next();
  );

还说使用 chrome 扩展 Advance Rest Client 进行测试可以正常工作。在请求头中有一个 Authorization: valueOfToken..

非常感谢。

【问题讨论】:

你有没有得到这个答案? 【参考方案1】:

授权不能简单。

指定天气BasicBearer 授权

有点像

$http.defaults.headers.common['Authorization'] = 'Basic ' + token;

$http.defaults.headers.common['Authorization'] = 'Bearer ' + token;

【讨论】:

Fwiw,'Bearer' 在我的服务器设置中对我不起作用。我在令牌值之前有to use 'Token'。但答案的要点是正确的。【参考方案2】:

试试这个:

$http(

url : "127.0.0.1/login",
method : 'GET',
headers : 
      Content-Type : 'application/json',    
      Authorization: token
      
).success(function(data)
    alert("login Successfully");
).error(function(error)
    alert("login error");
)

【讨论】:

这里的键应该是headers,而不是header【参考方案3】:

我遇到了同样的问题,结果发现问题与服务器端的 Apache 配置有关。我确实发现在这里可能对您有用的一件事是我的授权令牌是在 preflight 请求标头而不是主请求中发送的,因此它可能不会出现在请求的标头中当您在开发人员工具中查看时。

我正在像这样设置我的默认值:

app.config(function($httpProvider) 
    $httpProvider.defaults.common['Authorization'] = token;
    // For angular 1.5, use:  
    // $httpProvider.defaults.headers.common['Authorization'] = token;        
);

【讨论】:

您应该在配置块中使用 $httpProvider 提供程序而不是 $http 实例。 在 angular 1.5 上你应该使用 $httpProvider.defaults.headers.common.Authorization

以上是关于Angularjs设置授权标头的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 不发送授权或任何额外的键/值标头

带有授权标头的 AngularJS CORS

Angularjs - 未在 Safari 中添加授权标头

使用 AngularJS 登录后不存在授权标头时,Spring Security 不会抛出错误

AngularJS 和跨域 POST

如何使用 angularjs 在 RESTful 请求中执行授权?