我正在尝试使用网络套接字创建一个实时聊天应用程序,目前正在使用 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");
}
});
});
这是我一直在使用的,但它没有重新路由到登录页面,而是只发送索引页面。 对于初学者来说,当用户发送初始获取/标头中没有授权,因此令牌应该为空/未定义,对吗?
即使使用错误的令牌进行授权,它仍然让用户通过
请让我知道我做错了什么,任何建议都会被采纳
您需要解决一些问题。
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。在那里你会发现很多有用的东西