美文网首页
前端携带 sessionID Access-Control-Al

前端携带 sessionID Access-Control-Al

作者: 南土酱 | 来源:发表于2022-09-07 09:23 被阅读0次

解决此问题的初衷是:
前后端项目分离, 前端使用的是 react 的 axios ,后端是 node的 express,
然后想通过session在node 设置一分钟过期来判断前端短信验证码是否过期。
一般在 node 项目里配置好 允许跨域的配置,就能让axios 跨域访问了:

app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type');
  res.header('Access-Control-Allow-Methods', '*');
  res.header("Access-Control-Allow-Origin", req.headers.origin);
  res.header('Content-Type', 'application/json;charset=utf-8');
  next();
});

🥠🥠问题就出在这个sessionID由于设置了允许跨域而导致前端发起请求的时候不被携带,即使后端有返回sessionID。


🥂🥂拓展:post请求满足什么条件才自动携带cookie?

👉 https://cloud.tencent.com/developer/article/1966765


但是咱们的项目是前端分离,难以保证每个请求都能满足上述条件,那怎么办?通过设置Credentials属性来强制请求带上 cookie。
官方文档的配置项里也有这一项:
👉 http://www.axios-js.com/zh-cn/docs/#%E8%AF%B7%E6%B1%82%E9%85%8D%E7%BD%AE
前端:

使用自定义的 axios:
 axios.create({
  withCredentials: true,
});
或者全局配置:
axios.defaults.withCredentials=true

后端:

//node 的  app.use里加上:
res.header('Access-Control-Allow-Credentials', 'true');
axios.请求配置
. 携带cookie

可以看到即便是跨域了,不同的端口号也是跨域。cookie头信息样式能携带 sessionID 去请求服务器。

相关文章

网友评论

      本文标题:前端携带 sessionID Access-Control-Al

      本文链接:https://www.haomeiwen.com/subject/fwnnnrtx.html