我正在使用Nodejs和Angular JS处理JWT令牌。我发现$ httpProvider在每个请求上设置标头的方式。但是没有发送标题。我的NodeJS应用程序在访问该标头时未定义。
我的角度代码
用于设置授权令牌 -
container.RegisterType(
typeof(IApp),
new InjectionFactory(f => App.Create(
container.Resolve<IOne>(),
container.Resolve<ITwo>())));
这是我的HTTP请求
$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);
}
};
}]);
这是我的NodeJS控制器
$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);
});
}
这是我的节点控制台,看到我没需要标题 -
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"});
}
});
答案 0 :(得分:0)
根据您的代码,您似乎不应该有任何问题。你在角度做什么应该理想地给你自定义标题
$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 }));
});
所有这些只是处理是否可以发送自定义标头。如果您正在使用auth令牌,则需要在$ http中以角度正确设置它,以便每次发出请求时都可以发送它。为此你可能想要包括
$http.defaults.headers.common['x-access-token'] = jwt
希望这有帮助。