Express js看不到cookie,这是在调用route之前设置的

时间:2017-05-09 15:01:22

标签: node.js express cookies yii2 session-cookies

登录我的Yii2 + angularjs页面时,我使用用户数据创建cookie:

$jwt = JWT::encode(array(1,2,3), 'myKey123')
setcookie('myData', $jwt, time() + 3600);

我想在我的nodejs + express app中访问它 - 在处理请求之前我必须检查,如果用户没有更改'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 route,app会看到cookie。

问题:如果通过发出$ http.get()请求来调用路由,则expressjs应用程序看不到任何cookie。

Yii2和expressjs运行在同一个IP上,但在不同的端口上,但我读过,不同的端口应该不是原因,不是吗?我已经玩过设置不同的cookie参数,但似乎没有任何帮助。我很感激你能得到任何帮助或提示,谢谢!

1 个答案:

答案 0 :(得分:0)

所以我知道现在的错误 - 在我的$ http.get()请求中,我根本没有设置 withCredentials:true 。当请求是"制作"直接在浏览器中,默认情况下传递cookie,但是当通过$ http.get()执行时,我不得不设置额外的参数,例如:

$http.get(myService('myRoute'), {
    params: {
        param1: 1,
        param2: 2
    },
    withCredentials: true
}).then(function(response) {
    $scope.returnedData = response.data;
});

来源:AngularJs documentation for $http requests

  

withCredentials - {boolean} - 是否在XHR对象上设置withCredentials标志。有关详细信息,请参阅带凭据的请求。