我正在MEAN中构建一个网站,为了验证和记住用户数据,我在Node后端使用了req.session。 所以我在用户登录时开始存储数据,并为某些调用重新使用它。问题是,当我在Angular中从前端进行调用时,req.session.user数据是未定义的。即使它已正确初始化。
但是,当我使用相同的代码并通过Postman进行调用时,它的工作正常。
这是我的电话代码:
$http.defaults.headers.common['Authorization'] = 'Bearer ' + auth.getToken();
console.log($http.defaults.headers.common.Authorization);
if($scope.production = true) {
$http.post('http://url:3000/newproductie', {
title: $scope.title,
year: $scope.year
}, {withCredentials: true}).success(function(data) {
$location.path('/success')
});
}
这是后端的代码:
if (req.session.user.isadmin) {
// my code
} else {
return res.status(401).json({
message: 'Niet bevoegd'
});
}
从前端执行调用时,req.session.user未定义,但通过邮递员填写。 所以我想这个问题在于我的Post方法中的角度。
路由代码:
var auth = jwt({
secret: 'SECRET',
userProperty: 'payload'
});
var producties = require('./producties.js');
router.post('/newproductie', auth, producties.newProductie);
编辑:也许这可以帮助,我曾经有这个工作(我放下了一段时间的项目),但不知何故它停止工作,我无法弄清楚为什么
编辑2:这也可以解决这个问题。我做了一个console.log(req.sessionID),这会打印出一个新的sessionID,每次我都会调用后端。我无法弄清楚为什么。随着邮差,这工作得很好
答案 0 :(得分:0)
试试这个
$http.post('http://url:3000/newproductie', {
title: $scope.title,
year: $scope.year},
{ 'headers': {'Authorization': 'Bearer ' + auth.getToken() }
}).success(function(data) {
console.log("DATA",data);
$location.path('/success')
});
}
答案 1 :(得分:0)
我修好了! 显然经过一些真正的挖掘,毕竟我的代码中没有(我怀疑)。 所以经过一番思考后,我记得我在Safari中启用了隐私功能,网站无法关注你,这就是为什么每次我都给后端做一个api调用时,我会做一个新的会话。 笨...