>我正在使用Express js和passport js作为身份验证系统,也使用视图引擎。我正在寻找一种解决方案,可以授予用户访问权限并让用户看到他们的文件,而不是其他人的文件。例如,在图像文件夹中,用户将访问他们的文件,之后,我想将这些文件传递给View Engine。如果我使用公用文件夹,任何人都可以看到其中的每个文件。您推荐什么解决方案?
您应该为每个用户创建一个目录。
然后,例如,您的网址/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
})
您的网址转换为
/resousrce?file=profile.png
我假设你已经有一个登录系统,所以你所要做的就是创建一个中间件来检查用户是否登录,并检查图像是否是他的图像。
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 编写的自定义中间件函数的 litte 代码片段 -
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