您如何使用密码保护 Node/Express 中的静态资产?

How do you password protect static assets in Node/Express?

我正在为 Node/Express 站点添加身份验证。我的身份验证使用的是护照。身份验证适用于路由,但允许用户猜测 url 并直接访问 image/video/etc。无需登录。

我该如何防止这种情况发生?我搜索了有关快递和护照的文件,但没有找到任何解决方案?

您是否偶然使用了 API 之类的 instagram? instagram 的 passport 包含这个功能:

function ensureAuthenticated(req,res,next){
  if(req.isAuthenticated()){
    console.log("USER IS AUTHENTICATED");
    return next();
  }
  console.log("USER IS NOT AUTHENTICATED");
  res.redirect('/home');
}

如果用户在该会话期间未通过身份验证,可以将其放置在路由文件的顶部,以将用户重定向到登录页面(如 /home)。

示例和更多信息可在此处找到:https://github.com/jaredhanson/passport-instagram/blob/master/examples/login/app.js 或 google 搜索 instagram passport

只需确保在静态中间件之前添加您的身份验证中间件。当然这个认证中间件应该能够让一些请求通过(比如获取登录页面的请求)。

这类似于@eephillip 提出的用于服务私有静态 assets/files 的解决方案:Using express.static middleware in an authorized route

他还创建了自己的 auth.ensureAuthenticated() 处理程序,但它与此几乎相同:Documentation for "ensureAuthentication" "isAuthenticated" passport's functions?