在服务器/服务器请求上传输cookie

时间:2016-07-04 14:52:27

标签: node.js cookies

在通用应用程序中,我放弃了服务器/服务器http请求中的每个用户cookie。 我已经构建了一个小型nodeJS应用程序来重现这个东西:

const fetch = require('isomorphic-fetch');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const session = require('express-session');

const server = require('express')();

server.use(bodyParser());
server.use(cookieParser());

server.use(session({
    secret: 'foo',
    httpOnly: false
}));

server.get('/set-cookies', (req, res) => {
  req.session.user = { name: 'john doe' };
  res.send('OK');
});

server.get('/a', (req, res) => {
  console.log('COOKIE IN A = ', req.cookies); // Cookies are here !

  const options = { credentials: 'include' };

  fetch('http://localhost:3131/b', options)
    .then( () => {
      res.send('OK');
    });
});

server.get('/b', (req, res) => {
  console.log('COOKIES IN B = ', req.cookies); // Cookies are lost ! How to get it back ?
  res.sendStatus(200);
});

server.listen(3131);

1)点击GET / set-cookies 2)点击GET / a(饼干按预期在这里)

问题:当/ a控制器向GET / b发出AJAX请求时,它不会传输cookie,因此路由/ b无法对用户进行身份验证

如何在每次请求时转移用户cookie? 我听说过" cookie jar"但我无法清楚地解释它是什么,我在网上找不到任何干净的解释,如果有人可以分享一些有关的知识,那就太棒了!

1 个答案:

答案 0 :(得分:1)

whatwg-fetch可以选择通过以下方式发送Cookie,但它似乎不起作用。

fetch('http://localhost:3131/b', {
   credentials: 'same-origin'
});

您可以通过以下方式手动将Cookie发送到fetch

server.get('/a', (req, res) => {
    console.log('COOKIE IN A = ', req.cookies); // Cookies are here !
    const options = { 
       'headers' : {
          'Cookie': req.headers.cookie
        } 
    };

    fetch('http://localhost:3131/b', options)
       .then( () => {
          res.send('OK');
       });
});