使用JWT保护API路由时出现TypeError: Cannot read properties of undefined (reading 'jwt')
解决JWT保护API路由时的TypeError: Cannot read properties of undefined (reading 'jwt')错误
错误核心原因
这个报错的本质是req.cookies未定义——你的Express应用没有配置cookie解析中间件,导致无法读取请求中的cookie数据,自然也就获取不到jwt字段。
分步解决方案
1. 安装cookie解析依赖
在项目根目录执行命令:
npm install cookie-parser
2. 在Express主应用中配置中间件
找到你的Express入口文件(通常是app.js或server.js),在挂载路由之前添加cookie解析中间件:
import express from 'express'; import cookieParser from 'cookie-parser'; const app = express(); // 必须在路由挂载前配置 app.use(cookieParser()); // 之后挂载你的用户路由 import userRoutes from './path/to/your/user/routes.js'; app.use('/api/users', userRoutes);
3. 验证Postman请求的cookie携带
确保请求受保护路由时,Postman已正确携带JWT cookie:
- 登录接口返回
Set-Cookie头后,开启Postman的"Automatically send cookies"设置,让工具自动保存并携带cookie - 若手动配置,在请求的"Cookies"标签页添加名为
jwt的cookie,值为你的令牌字符串
额外检查项
- 确认登录接口生成JWT后,正确通过
res.cookie()设置cookie:// 示例登录接口代码片段 const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '30d' }); res.cookie('jwt', token, { httpOnly: true, secure: process.env.NODE_ENV !== 'development', sameSite: 'strict', maxAge: 30 * 24 * 60 * 60 * 1000 }); - 检查
process.env.JWT_SECRET是否已正确配置,确保令牌生成逻辑无错误
内容的提问来源于stack exchange,提问作者Samarth
相关产品推荐
相关产品推荐

