1

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

现在,我遇到的问题是,当公共资产文件夹中缺少一些图像时,我会访问身份验证中间件,并再次重定向到登录 url。这是有问题的,因为我的日志中有几个302重定向,我想防止这种情况发生。

无论如何可以安全地知道请求将匹配 trie-router 中的路由作为重定向的先决条件,否则返回 a 404

4

2 回答 2

1

你能发布你的配置代码吗?

路由仍然在路径上匹配,因此如果您只在这些路径上安装身份验证中间件,那么它应该可以按预期工作。例如:

app.use('/private', passport.authenticate());
于 2014-12-30T19:25:16.383 回答
0

So it looks like the static middleware yields if it cant find the file.

You could write a custom middleware, such as fileNotFound() below, that you use after the static and before the controllers.

Something like:

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
于 2014-12-30T20:31:30.193 回答