Passport JWT:req.user 始终未授权
Posted
技术标签:
【中文标题】Passport JWT:req.user 始终未授权【英文标题】:Passport JWT : req.user is always Unauthorized 【发布时间】:2019-03-12 23:46:27 【问题描述】:我已经搜索过关于堆栈溢出的类似问题,但其中任何一个都不适合我,所以我再次问这个问题。
我正在使用passport-jwt 和express
。
我想登录用户 id ,将其存储在其他模型中。但每次我得到 401 Unauthorized
这里是 helpers/passport.js
const options = ;
options.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
options.secretOrKey = configuration.secret_key.JWTsecretkey;
module.exports = passport =>
passport.use(
new JwtStrategy(options, (jwt_payload, done) =>
console.log('jwt_payload ==',jwt_payload);
User.findById(jwt_payload.id)
.then(user =>
if (user)
return done(null, user);
return done(null, false);
)
.catch(err =>
console.log(err);
return done(err, false);
);
)
);
;
这里是 server.js
global.express = require('express');
global.app = express();
global.passport = require('passport');
global.jwt = require('jsonwebtoken');
global.JwtStrategy = require('passport-jwt').Strategy;
global.ExtractJwt = require('passport-jwt').ExtractJwt;
global.requireTree = require('require-tree')
global.controllers = requireTree(rootdir+'/controllers')
global.routes=requireTree(rootdir+'/routes')
global.helpers = requireTree(rootdir + '/helpers')
app.use(passport.initialize())
require(rootdir+'/helpers/passport')(passport)
app.use('/api/auth',routes.api.auth);
app.listen(8888)
routes/api/auth.js
const router=express.Router();
router.get('/user', passport.authenticate('jwt', session: false ),controllers.auth.user);
module.exports =router
controllers/auth/user.js
module.exports=(req,res)=>
res.json(
user:req.user
);
当我尝试使用邮递员但不工作时。
我也尝试过:ExtractJwt.fromAuthHeaderWithScheme('jwt')
因为它在某些问题中被赞成,但它不起作用。
我正在使用
"护照": "^0.4.0" , "passport-jwt": "^4.0.0" , "jsonwebtoken": "^8.3.0"
请帮我解决这个问题。
【问题讨论】:
【参考方案1】:我已经通过替换解决了上述错误
User.findById(jwt_payload.id)
与User.findById(jwt_payload._id)
这里更新passport.js
const options = ;
options.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
options.secretOrKey = configuration.secret_key.JWTsecretkey;
module.exports = passport =>
passport.use(
new JwtStrategy(options, (jwt_payload, done) =>
console.log('jwt_payload ==',jwt_payload);
User.findById(jwt_payload._id)
.then(user =>
if (user)
return done(null, user);
return done(null, false);
)
.catch(err =>
console.log(err);
return done(err, false);
);
)
);
;
【讨论】:
以上是关于Passport JWT:req.user 始终未授权的主要内容,如果未能解决你的问题,请参考以下文章
Passport JWT req.user 在我的一条路线中未定义
使用 passport-jwt 和结语,我的 req.user 是空的
Node + Express + Passport + Mongoose:req.user 未定义