如何使用 passport-jwt send/extract nodejs 中的 JWT 令牌?
How to send/extract JWT token in nodejs with passport-jwt?
我已经尝试检查它们是否是关于如何使用 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);
});
问题是:
我试图访问 profile
而没有从 服务器本身 在 header
中添加 Authorization
。 Authorization
包含生成的 token
.
使用 Postman 我可以使用 UI 来做到这一点,如上所述。但是,在代码中,我需要在访问 profile
路由之前创建一个中间件。
app.use(
"/profile",
(req, res, next) => {
req.headers.authorization = `Bearer ` + req.cookies["authentication-token"];
next();
},
profileRouter
);
我已经尝试检查它们是否是关于如何使用 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);
});
问题是:
我试图访问 profile
而没有从 服务器本身 在 header
中添加 Authorization
。 Authorization
包含生成的 token
.
使用 Postman 我可以使用 UI 来做到这一点,如上所述。但是,在代码中,我需要在访问 profile
路由之前创建一个中间件。
app.use(
"/profile",
(req, res, next) => {
req.headers.authorization = `Bearer ` + req.cookies["authentication-token"];
next();
},
profileRouter
);