我的应用程序使用Koa.js,koa-passport用于验证逻辑。我设置它的方式是在公共内容(js,css,img等)之间插入中间件(护照),或者更准确地说是static中间件和私有控制器(使用{{ 3}})。然后,如果未经身份验证的用户尝试访问路由器,则会将请求重定向到登录URL。
现在,我遇到的问题是,当公共资产文件夹中缺少某些图像时,我会进入身份验证中间件,并再次重定向到登录URL。这是有问题的,因为我在日志中得到了几个302
重定向,我想阻止它。
无论如何要安全地知道请求会匹配trie-router中的路由作为重定向的前提条件,否则返回404
?
答案 0 :(得分:1)
您可以发布配置代码吗?
路径上仍然匹配路由,因此如果您只在这些路径上安装了身份验证中间件,那么它应该按预期工作。 EG:
app.use('/private', passport.authenticate());
答案 1 :(得分:0)
因此,如果无法找到该文件,静态中间件就会产生。
您可以在静态之后和控制器之前编写一个自定义中间件,例如下面的fileNotFound()
。
类似的东西:
var serve = require('koa-static');
function fileNotFound(rootPath){
var pattern = new RegExp('^' + rootPath + '/.*/')
return function *(next){
if(pattern.test(this.path)){
this.throw(404);
}
else{
yield next;
}
}
}
app.use(serve('/public'));
app.use(fileNotFound('/public'));
// add controllers after this