如何在 express js 中授予用户特定文件访问权限

how to give user specific file access in express js

我使用 express js 和 passport js 作为身份验证系统,也使用视图引擎。我正在寻找一种解决方案,可以让用户访问并让用户看到他们的文件,而不是其他人的文件。例如,在图像文件夹中,用户将访问他们的文件,然后我想将这些文件传递给查看引擎。如果我使用 public 文件夹,任何人都可以看到其中的每个文件。您推荐什么解决方案?

我假设你已经有了一个登录系统,所以你所要做的就是创建一个中间件来检查用户是否登录,并检查图像是否是他的图像。

app.use("/user/:user/**",function(req,res){
  if (req.params.user == thisuser){
     //serve the file
  } else {
    res.status(403); //access denied
    res.end();
  }
  //check based on cookies whether the user has the permission to view this image
});

我建议您使用 Passport.Js 本地身份验证。您可以查看官方文档 - http://www.passportjs.org/docs/authenticate/ 我个人在与您所处的相同场景中使用过它。

这是我使用 passport 编写的自定义中间件函数的一小段代码 -

module.exports = {
    ensureAuthenticated : function(req, res, next){
        if(req.isAuthenticated()){
            return next();
        }

        req.flash('error_msg', 'Please login to view this resource.')
        res.redirect('/users/login');
    }
}

随时查看我的 github 存储库中的整个解决方案 - https://github.com/StechAnurag/loginsys

您应该为每个用户创建一个目录。

那么,例如,你的 URL 是 /show/files

在您的逻辑中,按用户信息过滤目录。

app.get('/show/files', (req,res)=>{
 // filter resources by user info
})

不要忘记为您的资源创建安全 URL。

坏主意:/images/amin/profile.png

好主意: 创建一条路线来为您的资源提供服务。

app.get('/resources', (req,res)=>{
// add query parameter for resource for example profile.png
// then check user directory and send it
})

你的 url 转换成

/resousrce?file=profile.png