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

Express.js中无法获取浏览器存储的Cookie问题求助

Cookie中已设置JWT Token,但req.cookies无法获取的问题

我已经在浏览器成功设置了存储JWT Token的Cookie,但使用req.cookies获取时返回undefined和[object: null prototype] {}。我已经尝试引入cookie-parser并配置了CORS,Cookie的键名设置为token,但问题仍未解决。

认证中间件代码

exports.isAuthenticated = asyncErrorHandler(async (req, res, next) => {
    // 从cookie中获取jwt token
    const { token } = req.cookies;
    console.log(req.cookies);
    if (!token) return next(new ErrorHandler("plz log in first ", 400));
    // 验证token是否匹配存储的jwt
    const decodedData = jwt.verify(token, process.env.JWT_SECRET);
    req.user = await userModel.findById(decodedData.id);
    next();
});

Express项目app.js代码

const express = require("express");
const errorMiddleware = require("./middleware/error");
const cookieParser = require("cookie-parser");
const bodyparser = require("body-parser");
const fileupload = require("express-fileupload");
const cors = require("cors");
const app = express();
app.use(cookieParser());
app.use(express.json());
app.use(bodyparser.urlencoded({ extended: true }));
app.use(fileupload());
app.use(
    cors({
        credentials: true,
        origin: "http://127.0.0.1:5173",
        optionsSuccessStatus: 200,
    })
);
// 路由导入
const productRoutes = require("./routes/productRoutes");
const userRoutes = require("./routes/userRoutes");
const orderRoutes = require("./routes/orderRoute");
const bodyParser = require("body-parser");
app.use("/api/v1", productRoutes);
app.use("/api/v1/user", userRoutes);
app.use("/api/v1", orderRoutes);

// 错误处理中间件
app.use(errorMiddleware);
module.exports = app;

终端报错情况

终端输出req.cookies为[object: null prototype] {},并触发了plz log in first的错误提示。


排查方向及解决方法

  • 检查Cookie的SameSite属性
    前后端跨域时,设置Cookie需确保SameSite为None,同时搭配Secure属性(本地http开发时可暂时改为Lax,上线后再切换回None + Secure),否则浏览器可能会拦截Cookie。

  • 确认前端请求携带Credentials
    前端发送请求时必须开启withCredentials: true(比如Axios中设置axios.defaults.withCredentials = true),否则Cookie不会被携带到后端接口。

  • 核对Cookie的域名与路径
    本地开发时如果前后端域名/端口不一致,要确保Cookie的domain设置匹配(比如统一用127.0.0.1而非混合localhost),path设为/以覆盖所有接口路径。

  • 验证cookie-parser的加载顺序
    确保app.use(cookieParser())放在所有路由、解析类中间件之前,否则请求被处理后cookie-parser无法再解析Cookie。

  • 检查浏览器Cookie存储状态
    在浏览器开发者工具的Application > Cookies中,确认Cookie的Name是token,Domain和Path与请求接口匹配;若开启了HttpOnly,前端无法通过document.cookie读取,但后端req.cookies仍能获取(前提是其他条件满足)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:01:12