如何在 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
我使用 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