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

升级passport-jwt至4.0版本后遭遇Unauthorized错误求助

passport-jwt 从1.2.1 升级到4.0 版本的配置调整

刚把passport-jwt从1.2.1升级到4.0版本,这里整理下调整后的配置代码,顺便提个容易踩的小坑:

首先,新版本里ExtractJwt的用法有变化,我改用了ExtractJwt.fromHeader方法来从请求头获取JWT。这里要注意请求头的正确拼写是Authorization(你写的Authorizaton少了一个字母i,这个小错误很容易导致认证失败,一定要检查!)

下面是完整的适配后代码:

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;

// 加载用户模型
var User = require('../models/user');
// 获取数据库配置文件
var config = require('../config/database');

module.exports = function(passport) {
    var opts = {};
    // 从Authorization请求头中提取JWT
    opts.jwtFromRequest = ExtractJwt.fromHeader('authorization');
    // 使用配置文件中的密钥验证JWT签名
    opts.secretOrKey = config.secret;

    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        // 根据JWT中的用户ID查找数据库用户
        User.findById(jwt_payload.id, function(err, user) {
            if (err) {
                return done(err, false);
            }
            if (user) {
                // 找到用户,返回用户对象
                done(null, user);
            } else {
                // 未找到用户,返回false
                done(null, false);
            }
        });
    }));
};

补充几个小细节:

  • HTTP请求头名称是大小写不敏感的,但建议和Authorization的标准拼写保持一致,避免不必要的兼容问题
  • 4.0版本的passport-jwt精简了旧版的API,类似fromAuthHeaderWithScheme这类方法已经被替代,确保所有调用都适配新版API即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:47