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

tou*_*tpt 27 node.js express passport.js

我有一个基于快递的项目,需要基于护照的身份验证.

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

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

如果您未经过身份验证,则不要提供角度应用程序.我尝试在/ admin路由上添加ensureAuthenticated,但它使路由不起作用(404).一旦我删除了EnsureAuthenticated,就会提供/ admin.

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

公用文件夹包含登录页面.

我怎么能实现这个目标?

Bob*_*obz 28

遇到同样的问题,这就是我最终做的事情!

app.use不允许你以这种方式链接中间件.各种app.VERB函数都可以,但是app.use没有.这是一次一个中间件.

如果将2个中间件拆分为单独的调用,则应获得所需的结果:

app.use('/admin', ensureAuthenticated);
app.use('/admin', express.static(path.join(__dirname, 'admin')));
Run Code Online (Sandbox Code Playgroud)

使用express提供静态文件时无法使用基本身份验证

  • 来自上面的来源:@Mathias 制作和编辑 - 从 express 4.x 版开始,您可以将多个中间件作为数组或参数或两者的混合传入 app.use。使静态文件授权安全现在是: (2认同)

Mik*_*Dev 20

您可以使用中间件检查路由,如果他们没有登录并且正在访问管理页面,则会重定向它们,例如(未经测试):

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

  • 这对我不起作用.当文件夹位于静态路径上时,它似乎不会通过app.use路由. (4认同)

vod*_*095 8

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);
Run Code Online (Sandbox Code Playgroud)

  • 对我没用,请求一直没有回应!也是app.use(app.router); 在Express 4.x中已删除 (6认同)