使用 JWT 进行身份验证不验证令牌

问题描述 投票:0回答:1

我正在尝试使用网络套接字创建一个实时聊天应用程序,目前正在使用 jwt 添加用户登录和身份验证,但由于某种原因它无法工作

app.get("/", (req, res) => {
  const token = req.headers["authorization"]?.split(" ")[1];
  console.log(token);
  if (!token) {
    return res.redirect("/login");
  }

  jwt.verify(token, secret, (err, decode) => {
    if (err) {
      return res.redirect("/login");
    } else {
      res.sendFile(__dirname + "/public/index.html");
    }
  });
});

这是我一直在使用的,但它没有重新路由到登录页面,而是只发送索引页面。 对于初学者来说,当用户发送初始获取/标头中没有授权,因此令牌应该为空/未定义,对吗?

即使使用错误的令牌进行授权,它仍然让用户通过

请让我知道我做错了什么,任何建议都会被采纳

javascript express jwt authorization
1个回答
0
投票

您需要解决一些问题。

app.get("/", (req, res) => {
  // Check if Authorization header exists and accurate formate with `Bearer` 
  const authHeader = req.headers["authorization"];
  
  if (!authHeader) {
    return res.redirect("/login");
  }

  // get the auth token 
  const parts = authHeader.split(" ");
  if (parts.length !== 2 || parts[0] !== "Bearer") {
    return res.redirect("/login");
  }

  const token = parts[1];

  try {
    // Use synchronous version of verify
    const decoded = jwt.verify(token, secret);
    
    // if token is valid
    res.sendFile(__dirname + "/public/index.html");
  } catch (err) {
    // Any verification error such as token expired, invalid signature, etc 
    return res.redirect("/login");
  }
});

要获取更多详细信息,您可以使用此repo。在那里你会发现很多有用的东西

© www.soinside.com 2019 - 2024. All rights reserved.