【问题标题】:How do you password protect static assets in Node/Express?您如何在 Node/Express 中使用密码保护静态资产?
【发布时间】:2015-07-21 06:16:26
【问题描述】:

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

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

【问题讨论】:

  • 我的猜测是确保您的身份验证中间件也可以在对静态资源的请求上运行。您不会找到它的文档,因为它与要求对任何其他路由进行身份验证没有什么不同。

标签: node.js express passport.js


【解决方案1】:

这类似于 @eephillip 提出的用于提供私有静态资产/文件的解决方案:Using express.static middleware in an authorized route

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您是否正在使用诸如 instagram 之类的 API? instagram 的护照包括这个功能:

      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 或通过谷歌搜索 instagram 护照

      【讨论】: