如何使用 passport-jwt send/extract nodejs 中的 JWT 令牌?

How to send/extract JWT token in nodejs with passport-jwt?

我已经尝试检查它们是否是关于如何使用 JWT extractors 从请求中获取令牌的在线示例,但我无法理解如何将 token 与请求一起发送用户登录后。

当我使用 Postman 时,有一个名为 Authorization 的选项卡,我可以在其中选择类型 Bearer Token,这使我能够添加 tokenAuthorization 请求 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 中添加 AuthorizationAuthorization 包含生成的 token.

使用 Postman 我可以使用 UI 来做到这一点,如上所述。但是,在代码中,我需要在访问 profile 路由之前创建一个中间件。

    app.use(
      "/profile",
      (req, res, next) => {
        req.headers.authorization = `Bearer ` + req.cookies["authentication-token"];
        next();
      },
      profileRouter
    );