如何用护照快递保护静态文件夹

我有一个快速的基于护照的需要authentication的项目。

后台是一个angularjs应用程序作为静态文件。

我的身份validation代码完全基于https://github.com/jaredhanson/passport-local/blob/master/examples/express3-no-connect-flash/app.js

如果您未通过身份validation,请不要使用angular度应用程序。 我已经尝试通过在/ admin路由添加ensureAuthenticated,但它使路由不工作(404)。 一旦我删除ensureAuthenticated /pipe理服务。

app.use(express.static(path.join(__dirname, 'public'))); app.use('/admin', ensureAuthenticated, express.static(path.join(__dirname, 'admin'))); //serve routes app.use(app.router); 

公用文件夹包含login页面。

我怎么能做到这一点?

你可以使用中间件来检查路由,如果它们没有login并且正在访问pipe理页面,就可以redirect它们,例如(未经testing):

 app.use(function(req, res, next) { if (req.user == null && req.path.indexOf('/admin') === 0) { res.redirect('/login'); } next(); }); 

同样的问题,这是我最终做的!

app.use不会让你以这种方式链接中间件。 各种app.VERBfunction,但app.use不。 这是一次一个中间件。

如果将两个中间件拆分为不同的调用,则应该得到所需的结果:

 app.use('/admin', ensureAuthenticated); app.use('/admin', express.static(path.join(__dirname, 'admin'))); 

使用快递服务静态文件时,不能使用基本身份validation

 app.use('/admin', function(req,res,next){ if(req.user){ return express.static(path.join(__dirname, 'public')); } else { res.render(403, 'login', {message:'Please, login!'}); } }); //serve routes app.use(app.router);