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

Postman用JWT更新用户报cannot read property id of undefined错误如何解决

问题根因及修复方案

你遇到的两个报错是关联出现的,核心问题在verifytoken.js文件的逻辑缺陷:

1. 致命逻辑错误:JWT校验失败后未终止代码执行

当前jwt.verify回调逻辑中,当校验出错返回token is not valid后,没有终止后续代码,仍然会执行req.user = user和next(),此时user为undefined,后续中间件访问req.user.id/req.user.isAdmin自然就会抛出"cannot read property xxx of undefined"报错。

2. Token拆分逻辑错误

你写的authHeader.split(" ")[1]用了多个空格作为分隔符:

  • 如果你在Postman里的token header是直接填的token值没有加Bearer 前缀,拆分后索引1的值就是undefined,JWT校验必然失败
  • 就算加了前缀,标准分隔符是1个空格,用多个空格也会拆分失败

修复步骤

第一步:修改verifytoken.js代码

替换后的完整代码如下:

const jwt = require("jsonwebtoken")

const verifyToken = (req,res, next) => {
    const authHeader = req.headers.token
    if(authHeader) {
        // 修正分隔符为1个空格,同时兼容直接填token的写法
        const token = authHeader.split(" ")[1] || authHeader;
        jwt.verify(token, process.env.JWT_SEC, (err, user)=>{
            // 增加return终止后续代码执行
            if(err) return res.status(403).json("token is not valid");
            req.user = user;
            next();
        })
    } else {
        return res.status(401).json(" you are not authenticated");
    }
};

const verifyTokenAndAuthorization = (req,res,next) => {
    verifyToken(req,res,()=> {
        if(req.user.id === req.params.id || req.user.isAdmin ) {
        next();
    } else {
        res.status(403).json("you are not allowed to do that");
    }
    });
};

const verifyTokenAndAdmin = (req,res,next) => {
    verifyToken(req,res,()=> {
        if( req.user.isAdmin) {
        next();
    } else {
        res.status(403).json("your are not the admin ");
    }
    });
};

module.exports = {verifyToken, verifyTokenAndAuthorization, verifyTokenAndAdmin};

第二步:检查Postman配置

  • 确认请求Headers里的key是token,和代码里req.headers.token的取值完全一致
  • 确认value里填的token是登录接口返回的完整access token,没有多余空格或特殊字符
  • 确认你要更新的用户id和token里的用户id一致,或者该token对应用户是管理员,否则会触发权限不足报错

内容的提问来源于stack exchange,提问作者Kerpen rodrigo rosa de miranda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:02