Node.js 使用express验证后,使用HTML提供CSS

Node.js 使用express验证后,使用HTML提供CSS,node.js,express,Node.js,Express,我的问题是:我只需要有条件地发送一个HTML文件(在成功验证之后)。这很好,但它不发送任何CSS。 我不想将它们作为静态文件使用,因为正如前面所说的,它们只针对经过身份验证的用户 那么,我如何在不向任何人公开的情况下发送带有此HTML文件的CSS呢 我也不能使用通用中间件,因为我有不需要身份验证的公共文件。因此,让中间件检查每个请求上的令牌会破坏这种权利吗 app.get("/admin/", (req, res) => { let token = req.cookies.sess

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

您可以通过将身份验证逻辑提取到其自己的中间件中,并仅在用户通过身份验证时调用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();
    });
});

保护css背后的动机是什么?我认为只保护实际页面就足够了。在任何情况下,请看下面我的答案。哦,可能只是我的强迫症。主要的一点是,虽然我可以保护一些文件,但允许其他文件。但是,CSS或notI确实有不需要身份验证的路由。我用req.url以
/admin
开头的条件实现了您的中间件。这样我就可以访问公共文件夹中的所有内容,但一旦人们想要管理文件,他们就必须进行身份验证。我进一步的问题是,这是否可以通过应用中间件的顺序来解决?我能在所有的管理工作之前把所有的事情都公诸于众,并让它这样运作吗?现在我看到的唯一方法是询问用户请求的内容,正如刚才描述的那样,这是正确的。中间件的顺序决定了什么将得到保护。例如,假设您不想再保护css,那么您可以将这一行移动到app.use(express.static(“path/to/css/directory”)//路由到auth中间件上方的css。