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

Passport非/login路由req.user为undefined、deserialize运行仍异常问题

问题结论

该问题与react-router无关,属于跨域请求未携带身份凭证导致的会话丢失问题。

原因说明

Passport的登录鉴权依赖session会话机制:用户登录成功后,服务端会生成唯一的sessionID,通过Cookie返回给前端;后续所有请求需要携带该Cookie,服务端才能匹配到对应的登录会话,通过deserializeUser方法得到req.user。
你仅在登录请求的axios配置中添加了withCredentials: true允许跨域携带Cookie,/tasks接口的请求未添加该配置,导致请求没有携带登录凭证,服务端无法识别用户身份,因此req.user返回undefined。

修复方法

单个请求配置修改

直接调整Tasks.js中的axios请求,添加withCredentials: true参数:

useEffect(() => {
  axios(
    {
      method: "GET",
      url: "http://localhost:4000/tasks",
      withCredentials: true
    }
  ).then(res => {
    console.log(res)
  })
}, [])

全局统一配置(推荐)

在前端项目的入口文件(如index.js)中添加axios全局配置,所有请求会自动携带跨域凭证,无需重复配置:

import axios from 'axios'
axios.defaults.withCredentials = true

可选优化

建议调整服务端的session配置,避免浏览器拦截Cookie、会话冗余存储的问题:

app.use(
  session({
    secret: "secretcode",
    resave: false, // 会话未修改时无需重存,减少性能开销
    saveUninitialized: false, // 未登录的空会话不存储
    cookie: {
      maxAge: 24 * 60 * 60 * 1000, // 会话有效期1天,可自行调整
      sameSite: 'lax',
      secure: process.env.NODE_ENV === 'production' // 仅生产环境开启HTTPS专属Cookie
    }
  })
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:06:02