升级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
相关产品推荐
相关产品推荐

