我的问题:我只需要有条件地发送HTML文件(成功验证后)。这工作正常,但它不发送任何CSS。 我不想将它们作为静态文件提供服务,因为如前所述它们仅适用于经过身份验证的用户。
那么我如何使用此HTML文件发送CSS而不将其公开给任何人?
我也不能使用通用中间件,因为我有公共文件,不需要身份验证。因此,在每个请求中使用中间件检查令牌会破坏这一点吗?
app.get("/admin/", (req, res) => {
let token = req.cookies.sessionToken;
fetch("https://authenticationAPI/admin/", {
headers:{
Authorization: token
}
}).then(response => {
if (response.status === 200) {
res.sendFile("index.html", { root: "./admin" }, (err) => {
if (err) console.log(err);
res.end();
});
} else {
res.send("Sorry, you're not an admin!");
res.end()
}
}).catch(err => {
res.redirect("Sorry, something went wrong there!");
});
});
答案 0 :(得分:1)
您可以通过将身份验证逻辑提取到自己的中间件中来保护任何资源,如果用户经过身份验证,则只调用next,否则返回401。
//Add your auth middleware before all your routes
app.use(function(req, res, next){
let token = req.cookies.sessionToken;
fetch("https://authenticationAPI/admin/", {
headers:{
Authorization: token
}
}).then(response => {
if (response.status === 200) {
return next(); //allow them to go to the next route/middleware if they are authenticated
} else {
res.send("Sorry, you're not an admin!");
res.end();
}
}).catch(err => {
res.redirect("Sorry, something went wrong there!");
});
});
//Everything form this point is protected
app.use(express.static("path/to/css/directory")); //route to your css
app.get("/admin/", (req, res) => {
res.sendFile("index.html", { root: "./admin" }, (err) => {
if (err) console.log(err);
res.end();
});
});