仅在Koa.js内重定向未经身份验证的用户以查找缺失的资源?

时间:2014-12-30 18:59:11

标签: javascript http koa passport.js

我的应用程序使用Koa.js,koa-passport用于验证逻辑。我设置它的方式是在公共内容(js,css,img等)之间插入中间件(护照),或者更准确地说是static中间件和私有控制器(使用{{ 3}})。然后,如果未经身份验证的用户尝试访问路由器,则会将请求重定向到登录URL。

现在,我遇到的问题是,当公共资产文件夹中缺少某些图像时,我会进入身份验证中间件,并再次重定向到登录URL。这是有问题的,因为我在日志中得到了几个302重定向,我想阻止它。

无论如何要安全地知道请求会匹配trie-router中的路由作为重定向的前提条件,否则返回404

2 个答案:

答案 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