使用express进行身份验证后,使用HTML提供CSS

时间:2017-11-20 13:32:38

标签: node.js express

我的问题:我只需要有条件地发送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!");
    });
});

1 个答案:

答案 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();
    });
});