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

为什么集成JWT鉴权后我的API接口无响应也不返回错误?

问题原因及修复方案

1. 鉴权中间件未正确调用

你定义的authJwt是返回express-jwt实例的工厂函数,直接将函数本身传给app.use不会生效,请求会卡在中间件环节无响应,修正index.js中的注册代码:

const authJwt = require('./helpers/jwt');
// 执行authJwt()拿到中间件实例再注册
app.use(authJwt());

2. 未排除无需鉴权的公开接口

全局注册鉴权中间件后,所有接口都会校验JWT,包括/login登录接口,会导致你无法先调用登录接口拿到token,需要在初始化express-jwt时配置白名单:
修改jwt.js代码:

const expressJwt = require('express-jwt');

const authJwt = () => {
    const secret = process.env.secret_key;
    return expressJwt({
        secret,
        algorithms: ['HS256']
    }).unless({
        // 在这里添加不需要鉴权的路径,和你实际的路由前缀对应即可
        path: [
            '/api/users/login', 
            // 其他公开接口比如注册、静态资源路径也可以加在这里
        ]
    })
}

module.exports = authJwt;

3. 缺失JWT错误处理中间件

如果JWT校验不通过(比如token过期、伪造、未传),express-jwt会抛出错误,你没有配置错误处理中间件的话,请求就会挂起无返回,在index.js所有路由注册的末尾添加错误处理:

// 所有其他中间件、路由注册完成后添加
app.use((err, req, res, next) => {
    // 专门处理jwt鉴权错误
    if (err.name === 'UnauthorizedError') {
        return res.status(401).json({message: '无效的身份凭证,访问被拒绝'})
    }
    // 通用错误返回
    res.status(err.status || 500).json({message: err.message})
})

4. Postman测试规范

修复后调用需要鉴权的接口时,需要在请求头中添加Authorization字段,值格式为Bearer <你登录接口拿到的token>,注意Bearer和token之间要有一个空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:48:01