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

JWT令牌验证问题:verifyAdmin中间件始终返回403错误

问题:请求始终触发verifyAdmin的403错误

调用路由时,请求总是进入verifyAdmin中间件的else分支,返回403状态码和"You are not alowed to do that!"提示。终端无报错,但Postman测试每次都触发该分支。

问题根源分析

查看令牌生成代码,生成JWT时仅传入了id字段:

const token = jwt.sign({ id: user.id }, secret, {
    expiresIn: process.env.EXPIRES_TOKEN,
})

而verifyAdmin中间件需要通过req.users.isAdmin判断权限,但req.users是从JWT解析出的数据,其中根本没有isAdmin字段,因此必然进入else分支返回403。

解决方案

1. 修改令牌生成代码,加入isAdmin字段

在生成JWT时,将用户的isAdmin属性也存入token:

const token = jwt.sign({ 
    id: user.id,
    isAdmin: user.isAdmin // 新增该字段
}, secret, {
    expiresIn: process.env.EXPIRES_TOKEN,
})

2. 可选优化:增强verifyAdmin的容错性

在verifyAdmin中增加字段存在性判断,避免因req.users.isAdmin不存在导致的异常:

const verifyAdmin = (req, res, next) => {
    if (req.users?.isAdmin === true) {
        next();
    } else {
        return res.status(403).json("You are not allowed to do that!");
    }
};

3. 重新生成令牌并测试

修改代码后,重新登录获取新的令牌,使用该令牌在Postman中测试接口,即可正常通过verifyAdmin验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:01:06