如何使用passport-jwt在nodejs中发送/提取JWT令牌?
Posted
技术标签:
【中文标题】如何使用passport-jwt在nodejs中发送/提取JWT令牌?【英文标题】:How to send/extract JWT token in nodejs with passport-jwt? 【发布时间】:2021-07-23 03:50:33 【问题描述】:我已尝试检查它们是否是有关如何使用 JWT extractors
从请求中获取令牌的在线示例,但我不明白如何在用户登录后随请求发送 token
。
当我使用Postman 时,有一个名为Authorization
的选项卡,我可以在其中选择Bearer Token
类型,这使我能够添加token
和Authorization
,请求http://localhost:5000/profile
成功。
但是,当我在成功登录后尝试访问个人资料http://localhost:5000/profile
时,浏览器仍然只显示Unauthorized
。
邮递员屏幕截图:
浏览器屏幕截图:
我已经按照passpot-jwt documentation的配置:
passport.use(
new JWTStrategy(
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey: "mysecret",
,
function (jwtPayload, done)
return User.findOne( username: jwtPayload.username )
.then((user) =>
return done(null, user);
)
.catch((err) =>
return done(err);
);
)
);
我的login
路线看起来像:
Router.post("/", (req, res, next) =>
passport.authenticate("local", session: false , (err, user, info) =>
if (err) return next(err);
if (!user)
return res.redirect("/login?info=" + info);
req.logIn(user, session: false , (err) =>
if (err) return next(err);
const token = jwt.sign( username: user.username , "mysecret");
res.json( user, token: `Bearer $token` );
);
)(req, res, next);
);
【问题讨论】:
您是否希望浏览器在重定向时自动附加授权标头? 现在,我想在服务器上做。 【参考方案1】:问题是:
我试图访问profile
而不从服务器本身 在header
中添加Authorization
。 Authorization
包含生成的token
。
使用 Postman,我可以使用上面解释的 UI 做到这一点。但是,在代码中,我需要在访问profile
路由之前创建一个中间件。
app.use(
"/profile",
(req, res, next) =>
req.headers.authorization = `Bearer ` + req.cookies["authentication-token"];
next();
,
profileRouter
);
【讨论】:
以上是关于如何使用passport-jwt在nodejs中发送/提取JWT令牌?的主要内容,如果未能解决你的问题,请参考以下文章
NodeJs Express passport-jwt 从令牌中获取错误的用户
使用 MERN 的 passport-jwt 不显示 cookie
在服务器端呈现 Express/React 应用程序上使用 passport-jwt