Node.js 如何使用express解析JWT?

Node.js 如何使用express解析JWT?,node.js,express,jwt,Node.js,Express,Jwt,我想访问我用node.js和passport读取的JWT的主体json const passport = require('passport'); passport.use(new JWTStrategy(services.uaa)); app.use(passport.initialize()); app.use(passport.authenticate('JWT', {session: false})); app.use(checkAuth); function checkAuth(re

我想访问我用node.js和passport读取的JWT的主体json

const passport = require('passport');
passport.use(new JWTStrategy(services.uaa));
app.use(passport.initialize());
app.use(passport.authenticate('JWT', {session: false}));

app.use(checkAuth);
function checkAuth(req: express.Request, res: express.Response, next: express.NextFunction) {
  console.log(req);
  return next();
}

当我简单地记录req时,它看起来并不像一个json。所以我想知道,如何将req对象解析为json?你有什么提示吗?谢谢大家!

req
是类型为
Request
的复杂Express'对象。 如果要访问头文件(JWT大部分时间都在头文件中传递),则需要使用:

req.get('Authorization') // or any other header: 'Content-Type', etc

您正在使用passportjs和
passport jwt
。再看一看文档,该策略如何从请求中“提取”JWT令牌(特别是它附带的“有效负载”)

const JwtStrategy=require('passport-jwt')。策略,
ExtractJwt=要求('passport-jwt')。ExtractJwt;
常量选项={
jwtFromRequest:ExtractJwt.FromAuthHeaderAsberToken(),
秘钥:“秘密”,
发卡机构:“accounts.examplesoft.com”,
观众:“yoursite.net”
}
passport.use(新JwtStrategy(选项,功能)(jwt_有效载荷,完成){
//jwt_有效载荷是您之前包含的有效载荷
//在jwt令牌中,当您创建jwt令牌时。
//您可以在这里验证请求,
//例如,检查数据库是否存在用户。
findOne({id:jwt_payload.sub},函数(err,User){
如果(错误){
返回完成(错误、错误);
}
如果(用户){
返回完成(空,用户);
}否则{
返回完成(null,false);
//或者您可以创建一个新帐户
}
});
}));
这样,您通常不需要额外的“checkAuth”函数。像这样使用它:

app.use(passport.authenticate('JWT',{session:false}));
//或
app.post('/protected',passport.authenticate('JWT',{session:false}),(req,res)=>{
//这将仅在身份验证成功时触发
//req.user将保留您在回调中从
//战略职能。
});

酷!当然,正如在其他人的回答中提到的,当您使用Passport的JWT实现时,您可能不需要直接访问令牌,并且您可以依赖Passport自己的方法。