Javascript AngularJS不发送授权或任何额外的键/值头
我正在使用带有Nodejs和Angular JS的JWT令牌。我找到了$httpProvider在每个请求上设置头的方法。但是没有发送头。我的NodeJS应用程序在访问该标题时未定义 我的角码 用于设置授权令牌- 这是我的HTTP请求Javascript AngularJS不发送授权或任何额外的键/值头,javascript,angularjs,node.js,express,jwt,Javascript,Angularjs,Node.js,Express,Jwt,我正在使用带有Nodejs和Angular JS的JWT令牌。我找到了$httpProvider在每个请求上设置头的方法。但是没有发送头。我的NodeJS应用程序在访问该标题时未定义 我的角码 用于设置授权令牌- 这是我的HTTP请求 $scope.getSearcHistory = function(){ console.log($localStorage.token); console.log( $rootScope.getCurrentUser()); $htt
$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"});
}
});
这是我的节点控制台,请看没有我需要的头--
根据你的代码,似乎你不应该有任何问题。理想情况下,您在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 app中获取标题时,请检查我的问题
访问控制请求标题:“授权,密钥”
,但我req.headers.authorization和req.headers.key都未定义。我的意思是如何访问该值?如果在req.headers上打印,那么得到的值是什么?我问题的最后一个代码块是控制台.log(req.headers
)对不起,我一定错过了。您是否尝试复制我提供的相同标题。我尝试了同样的方法,但我无法重现这个错误。此外,请尝试更新您的授权
,因为它区分大小写。
app.configure(function () {
app.use(app.router);
app.use(allowCrossDomain);
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
$http.defaults.headers.common['x-access-token'] = jwt