Cookie未添加到会话中

时间:2016-09-09 23:18:46

标签: node.js express reactjs session-cookies axios

我正在使用React-Redux开发Web应用程序,向不同域中的nodejs中的API发出请求。

要登录用户,我会将凭据发送到我的API,这会验证它们并将其作为JWT发回给我。我试图通过使用ExpressJS来做到这一点,所以在我的API的登录路径中我有:

res.cookie("my_token", token);

问题是Cookie没有被添加到会话中。使用Mozilla,我可以看到Set-Cookie属性在带有正确cookie的标题中,但它并没有显示在我的资源中。

我还使用DHC进行了一些测试,使用DHC将Cookie成功存储在我的会话cookie中。

我有

res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", true);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 

在我的网站和api中。在网站上,我使用react模块axios来发出请求。在api中,我使用cookie-parser来处理cookie。这些是我的中间件(api和app):

    app.use(function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Credentials", true);
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      next();
    });

    const cookieParser = require("cookie-parser");
    app.use(cookieParser());

    const bodyParser = require("body-parser");
    app.use(bodyParser.json({limit: '50mb'}));
    app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

    const morgan = require("morgan");
    app.use(morgan('dev'));

这是我的要求:

axios.post(`${ROOT_URL}/login`, creds)
  .then(res => { /*...*/ })
  .catch(err => { /*...*/ });

这是我的回答:

res.cookie("session_token", token, { domain: ".mydomain.com" }).send(response);

1 个答案:

答案 0 :(得分:2)

我对Angular代码有类似的问题,我正在解决问题

  • 从客户端启用withCredentials我需要启用一些选项来启用它
  • 从后端res.header("Access-Control-Allow-Origin", "*");还不够

你可以做这样的事情

    res.header("Access-Control-Allow-Origin", req.header('Origin'));

因为您需要返回主机而不是星号,这仅用于开发目的,我建议您稍后将其更改为某个静态网址

相关问题