代码之家  ›  专栏  ›  技术社区  ›  Ala Eddine Menai

未经授权:使用jwt护照进行身份验证

  •  0
  • Ala Eddine Menai  · 技术社区  · 3 年前

    我试着检查它们是否是如何使用的在线示例 JWT extractors 从请求中获取令牌,但我不明白如何发送 token 用户登录后发出请求。

    当我使用 Postman ,有一个名为 Authorization 在那里我可以选择类型 Bearer Token 这使我能够添加 代币 授权 以及请求 http://localhost:5000/profile 成功了。

    然而,浏览器仍然只显示我 Unauthorized 当我尝试访问个人资料时 http://localhost:5000/profile 成功登录后。

    邮递员屏幕截图:

    POSTMAN-SCREENSHOT

    浏览器屏幕截图:

    BROWSER-SCREENSHOT

    我一直在关注 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);
    });
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Ala Eddine Menai    3 年前

    问题是:

    我试图访问 profile 不添加 Authorization header 服务器本身 The 授权 包含生成的 token .

    邮递员 我能够用 UI 如上所述。然而,在代码中,我需要在访问之前创建一个中间件 轮廓 路线。

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

    登录后,您可以在标头中发送授权令牌

    (function () {
      fetch("http://localhost:5000/profile", {
        method: "GET",
        headers: {
          "Content-Type": "text/plain",
          "X-My-Custom-Header": "value-v",
          Authorization:
            "Bearer " + Token,
        },
      });
    })();
    

    希望你有所了解。