我必须构建一个项目,用户将登录并上传一些图像和视频,并且上传的文件应该只有上传者或网站管理员才能看到。
我是主要的Node.js,所以我尝试使用快速中间件来限制用户的媒体文件,但我注意到这不是处理这个问题的最佳方式,因为快递不是善于渲染静态内容。
以下是我在一些谷歌会议之后可以想到的一些选项
有没有其他方法可以做到这一点?
答案 0 :(得分:1)
最优雅的方式是礼貌地要求他们不要访问其他人的内容。
我不确定这是最有效的方式。
但是,严肃的说,我建议将express.static
中间件与Passport或其他东西一起使用来实现身份验证和权限。你不是"渲染"这里有任何静态内容。您只是直接从磁盘传输文件。
答案 1 :(得分:1)
每个用户都有一个唯一的ID,其中内容(文件和视频等)部分由此ID引用,以便客户只能访问其ID内容
用户登录,nodejs将该用户与从mongodb检索到的唯一ID配对。无需将其卸载到nginx。存放内容的位置与此逻辑无关。可以是本地文件系统,mongo,S3等......
避免将用户名或ID放入任何URL,其冗余服务器在内部维护此知识。无需弄乱URL。例如,当我与我的私人内容交互时,Amazon AWS拥有此URL
https://console.aws.amazon.com/route53/home?#resource-record-sets:ZAHKXPA7IKZ8W
看到它只显示我的用户名资源所特有的内容ID。目标是尽量减少URL中的混乱。
或者,在共享资源的世界中,例如闪烁,此处URL确实提供用户名和资源ID https://www.flickr.com/photos/okinawa-soba/31419099190/in/photostream/在您的情况下,即使有人拿起另一个内容的URL,服务器也必须拒绝,因为它不是被授权捣毁另一个人的内容