Next.js API路由中获取JWT Cookie并验证时的if语句报错问题
问题排查与解决:Next.js API中JWT解码email用于if判断报错
核心问题分析
你遇到的报错本质不是if语句本身的问题,而是没有提前处理Token不存在、无效,或解码后数据异常的情况,导致email变量在进入判断前就已经触发了错误。
具体排查方向与解决方法
Token不存在时直接解码导致data为null
当用户未登录或Cookie失效时,req.cookies.jwtToken会是undefined或null,此时调用jwt.decode(token)会返回null,再取data.email就会抛出Cannot read properties of null (reading 'email')错误。- 解决:先判断Token是否存在,再执行解码逻辑:
const token = req.cookies.jwtToken; if (!token) { return res.json({msg: "You are not logged in! Please login first."}) } const data = jwt.decode(token);
- 解决:先判断Token是否存在,再执行解码逻辑:
Token无效/过期但decode仍返回不完整数据
jwt.decode只做解码操作,不验证Token的签名和有效期——哪怕Token过期或被篡改,也可能返回部分数据,甚至缺失email字段。此时直接判断!email前,data可能已经是异常格式。- 解决:改用
jwt.verify替代decode,同时捕获验证错误:import jwt from 'jsonwebtoken'; const token = req.cookies.jwtToken; if (!token) { return res.json({msg: "You are not logged in! Please login first."}) } let data; try { data = jwt.verify(token, process.env.JWT_SECRET); // 替换为你的JWT密钥 } catch (err) { return res.json({msg: "Invalid or expired token. Please login again."}) } const email = data.email; if (!email) { return res.json({msg: "Invalid token data. Please login again."}) } // 后续创建笔记逻辑
- 解决:改用
快速排查验证步骤
在代码中先打印token和data的完整值,确认数据状态:console.log('Token:', token); console.log('Decoded data:', data);通过日志确认Token是否存在、data是否包含
email字段,避免因数据异常导致判断出错。
修正后的完整示例代码
import jwt from 'jsonwebtoken'; export default function handler(req, res) { const token = req.cookies.jwtToken; // 第一步:检查Token是否存在 if (!token) { return res.status(401).json({msg: "You are not logged in! Please login first."}) } let data; try { // 验证Token有效性,同时解码 data = jwt.verify(token, process.env.JWT_SECRET); } catch (error) { return res.status(401).json({msg: "Invalid or expired token. Please login again."}) } // 使用可选链避免data为undefined时报错 const email = data?.email; if (!email) { return res.status(401).json({msg: "Invalid token data. Please login again."}) } // 执行创建笔记逻辑 // do something... res.status(200).json({msg: "Note created successfully", userEmail: email}) }
内容的提问来源于stack exchange,提问作者Saqlen Mehdi
相关产品推荐
相关产品推荐

