我可以提供静态资产(由npm run build
通过React源代码创建(,如下所示:
app.use('/', express.static(path.join(__dirname, 'apps', 'home', 'build')))
如果我想保护URL及其静态资产,我可以这样做:
app.use(function(req, res, next) {
if (!req.isAuthenticated()) {
res.redirect('/login');
}
else {
app.use('/profile', express.static(path.join(__dirname, 'apps', 'profile', 'build')))
next();
}
});
如果我不在那里调用next()
,那么当我在/profile
进行身份验证尝试时,程序将挂起。
下一步将调用哪些中间件/路由?在没有身份验证的情况下,app.use(express.static(...))
在没有next()
的情况下为静态资产提供服务似乎没有问题。为什么我现在需要它?我没有为/profile
或类似的东西定义GET路由。
响应请求动态附加中间件是不正确的。(经过身份验证的请求将使所有未来的请求在未经该代码身份验证的情况下工作。(相反,您应该将授权检查中间件置于文件服务中间件之前,以允许它拦截请求。
const requireAuthentication = (req, res, next) => {
if (!req.isAuthenticated()) {
res.redirect('/login');
} else {
next();
}
};
app.use('/profile',
requireAuthentication,
express.static(path.join(__dirname, 'apps', 'profile', 'build')));