在Ajax POST请求之后,使用Node js设置cookie

时间:2018-06-18 14:14:59

标签: node.js ajax express cookies cors

在我的server.js文件(我的Node js api)上,我已经设置了

var corsOptions = {
  origin: 'https://mydomain.tld',
  credentials: true,
  optionsSuccessStatus: 200
}
app.use(cors(corsOptions));

为了测试是否我可以设置cookie(没有任何ajax请求)我成功使用

app.get('/test1', (req, res) => {
  res.setHeader('Set-Cookie', cookie.serialize('name', String("John Doe"), {
    httpOnly: true,
    maxAge: 60 * 60 * 24 * 7 // 1 week
  }));
  return res.json({message : "Cookie set"});
});
app.get('/test2', (req, res) => {
  var cookies = cookie.parse(req.headers.cookie || '');
  var m = cookies.name;
  if (m) {
    return res.json({name : m});
  }
});

这完美有效。 在客户端,我想用Ajax(用户名)执行POST请求,在我的服务器上,我想保留一个带有用户名的cookie。

所以客户端:

var data = {};
data.name = document.getElementById("name").value;
$.ajax({
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json',
    crossDomain: true,
    xhrFields: { withCredentials: true },
    url: HOST+'/step1',
    success: function(data) {
      if (data.code == 200) {
        doStuff(data);
      }
      else if (data.code == 100) {
        complainAboutStuff(data);
      }
    }
  });

服务器端:

app.post('/step1', (req, res) => {
  res.setHeader('Set-Cookie', cookie.serialize('name', String(req.body.name), {
    httpOnly: true,
    maxAge: 60 * 60 * 24 * 7 // 1 week
  }));
  return res.json();
});

然而它没有存储任何cookie,如果我回到/ test2它没有显示名称,并且使用Firefox Developer工具我可以清楚地看到它从未被设置。

我不明白为什么

crossDomain: true,
xhrFields: { withCredentials: true },

是不够的(由于我设置的corsOptions,我的浏览器/服务器中没有任何关于CORS的警告。

如果您有任何想法,或者我可以使用的解决方法? 我哪里错了? 谢谢

0 个答案:

没有答案