AngularJS 不发送授权或任何额外的键/值标头
Posted
技术标签:
【中文标题】AngularJS 不发送授权或任何额外的键/值标头【英文标题】:AngularJS not sending Authorization or any extra key/value header 【发布时间】:2017-09-09 12:47:27 【问题描述】:我正在使用 Nodejs 和 Angular JS 处理 JWT 令牌。我发现 $httpProvider 在每个请求上设置标头的方式。但是标题没有被发送。我的 NodeJS 应用程序在访问该标头时未定义。
我的角码
用于设置授权令牌 -
$httpProvider.interceptors.push(['$q', '$location', '$localStorage', function($q, $location, $localStorage)
return
'request': function (config)
config.headers = config.headers || ;
if ($localStorage.token)
console.log($localStorage.token)
config.headers.Authorization = 'Bearer ' + $localStorage.token;
console.log(config.headers);
return config;
,
'responseError': function(response)
if(response.status === 401 || response.status === 403)
$location.path('#login');
return $q.reject(response);
;
]);
这是我的 HTTP 请求
$scope.getSearcHistory = function()
console.log($localStorage.token);
console.log( $rootScope.getCurrentUser());
$http(
url: baseUrl+'userSearches/2',
method : 'GET',
headers:
'key': '1234424252'
)
.success(function(data, status, headers, config)
console.log(data);
$scope.searches = data;
)
.error(function(data, status, headers, config)
console.log(status);
);
这是我的 NodeJS 控制器
this.router.use(function(req, res, next)
console.log(req.headers);
var bearerToken;
var bearerHeader = req.headers.authorization;
console.log(bearerHeader)
if (typeof bearerHeader !== 'undefined')
var bearer = bearerHeader.split(" ");
bearerToken = bearer[1];
req.token = bearerToken;
next();
else
res.send(403).json("Authorization": "Not allowed");
);
这是我的 Node 控制台,看到没有我需要的标头 --
host: 'localhost:8080',
connection: 'keep-alive',
'access-control-request-method': 'GET',
origin: 'http://localhost:440',
'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
'access-control-request-headers': 'authorization,key',
accept: '*/*',
referer: 'http://localhost:440/vokal/'
【问题讨论】:
【参考方案1】:根据您的代码,您似乎应该没有任何问题。理想情况下,您在 Angular 中所做的事情应该为您提供自定义标题
$http(
method: 'GET',
url: '/api',
headers:
'Authorization': 'test',
'Accept': 'application/json',
"X-Test-Header": 'true'
).then(function(response)
if (response.data == 'ok')
// success
else
// failed
);
您能否检查一下您的控制台是否收到标题。
如果这不起作用,那么您可能需要将节点设置为允许所有标头
var allowCrossDomain = function(req, res, next)
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
;
并在您的应用中进行配置
app.configure(function ()
app.use(app.router);
app.use(allowCrossDomain);
app.use(express.errorHandler( dumpExceptions: true, showStack: true ));
);
所有这些只是处理是否可以发送自定义标头。如果您正在使用身份验证令牌,则需要在 $http 中正确设置它,以便每次发出请求时都可以发送它。为此,您可能需要包括
$http.defaults.headers.common['x-access-token'] = jwt
希望这会有所帮助。
【讨论】:
问题是当我在 Express 应用程序中获取标题时,请检查我的问题access-control-request-headers: 'authorization,key'
但我的 req.headers.authorization 和 req.headers.key 都未定义。我的意思是如何访问值?
如果您在 req.headers 上进行打印,那么您会得到什么价值?
我问题中的最后一个代码块是console.log(req.headers
)
对不起,我一定错过了。您是否尝试复制我给出的相同标题。我尝试了同样的事情,但我无法重现这个错误。另外,请尝试更新您的 authorization
,因为它区分大小写。以上是关于AngularJS 不发送授权或任何额外的键/值标头的主要内容,如果未能解决你的问题,请参考以下文章
CORS AngularJS 不使用 POST 或 DELETE 发送 Cookie/凭据,但 GET OK
如何使用 angularjs 在 RESTful 请求中执行授权?