登录我的Yii2 + angularjs页面时,我用用户数据创建了cookie:
$jwt = JWT::encode(array(1,2,3), 'myKey123')
setcookie('myData', $jwt, time() + 3600);
我想在我的nodejs + express应用程序中访问它 - 在处理请求之前,我必须检查,如果用户没有更改"myData"cookie。这就是我现在的做法:
app.use(cookieParser());
app.get('/*', function (req, res, next) {
if(req.cookies.myData) {
jwt.verify(req.cookies.myData, 'myKey123', function(err, decoded) {
if(err)
res.sendStatus(403);
else
return next();
});
} else {
res.sendStatus(403);
}
});
如果我登录后直接在浏览器中调用 expressjs 路由,应用程序会看到 cookie。
问题:如果通过发出 $http.get(( 请求来调用路由,则 expressjs 应用程序看不到任何 cookie。
Yii2 和 expressjs 运行在同一个 IP 上,但在不同的端口上,但我读过,不同的端口不应该是原因,不是吗?我已经尝试设置了不同的cookie参数,但似乎没有任何帮助。我将不胜感激我能得到的任何帮助或提示,谢谢!
所以我知道现在出了什么问题 - 在我的 $http.get(( 请求中,我根本没有设置凭据:true。当直接在浏览器中"发出"请求时,默认情况下会传递cookie,但是当通过$http.get((执行此操作时,我必须设置额外的参数,例如:
$http.get(myService('myRoute'), {
params: {
param1: 1,
param2: 2
},
withCredentials: true
}).then(function(response) {
$scope.returnedData = response.data;
});
来源:用于$http请求的 AngularJs 文档
withCredentials - {boolean} - 是否在 XHR 对象上设置 withCredentials 标志。有关详细信息,请参阅带有凭据的请求。