You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中req.session为空对象,Postman可正常使用的问题求助

会话认证异常问题

问题现象

采用会话认证(单用户网站),后端基于Node.js使用cookie-session和cors包实现。Postman/Insomnia中登录→访问受保护路由→登出流程完全正常,但React前端调用API时,后端req.session为空对象,受保护路由返回401,已尝试修改Cookie设置但无效,卡了10小时。

后端配置

使用的包:cookie-session、cors

const sessionConfig = {
  secret: tokenSecret,
  cookie: {
    maxAge: 1000 * 60 * 60 * 1,
  },
  resave: true,
  saveUninitialized: true,
};
app.use(session(sessionConfig));

app.use(morgan('dev'));
console.log(NODE_ENV === 'production' ? PRO_URL : LOCAL_URL);
const corsOptions = {
  credentials: true,
  origin: NODE_ENV === 'production' ? PRO_URL : LOCAL_URL,
};
app.use(cors(corsOptions));

app.use(routes);

前端Axios配置

const API_BASE_URL = 'myURL';

const api = axios.create({
  baseURL: API_BASE_URL,
  withCredentials: true,
});

await api.post('protected route') // 此请求返回401

登录处理逻辑

async function login(req, res, next) {
  try {
    if (req.session.isAuth)
      throw new ApiError('该账户已登录', StatusCodes.BAD_REQUEST);
    const { password } = req.body;
    console.log(password);
    if (password?.toString() !== WEBSITE_PASSWORD)
      throw new ApiError('密码不正确', StatusCodes.UNAUTHORIZED);
    req.session.isAuth = true;
    return responser(res, StatusCodes.ACCEPTED);
  } catch (error) {
    return next(error);
  }
}

排查解决建议

  • 调整Cookie的SameSite与Secure属性:默认cookie-session的SameSite为lax,跨域场景下浏览器可能拦截Cookie。修改session配置:
    const sessionConfig = {
      secret: tokenSecret,
      cookie: {
        maxAge: 1000 * 60 * 60 * 1,
        sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',
        secure: process.env.NODE_ENV === 'production',
      },
      resave: true,
      saveUninitialized: true,
    };
    
  • 校验CORS origin与前端地址完全匹配:确保后端LOCAL_URL/PRO_URL和前端API_BASE_URL完全一致,包括协议、域名、端口,不能有多余斜杠或拼写错误。
  • 检查请求Cookie携带情况:在Chrome开发者工具Network面板,查看登录请求响应头的Set-Cookie,再确认后续受保护路由请求的请求头是否包含Cookie字段,判断是否是浏览器拦截了Cookie发送。
  • 本地开发临时禁用SameSite限制:在Chrome地址栏输入chrome://flags/#same-site-by-default-cookies,将该选项设为Disabled,重启浏览器后测试,验证是否为SameSite规则导致的问题。
  • 升级cookie-session版本:旧版本可能存在跨域Cookie的兼容性bug,尝试升级到最新稳定版。

内容的提问来源于stack exchange,提问作者Saybers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:55:22