【问题标题】:Protect uploaded files and provide access only authorized users保护上传的文件并仅提供访问权限的授权用户
【发布时间】:2016-01-26 13:00:09
【问题描述】:

我正在使用 Multer 上传一些文件,我想知道在上传后保护对这些文件的访问的推荐方法是什么。

我有两种类型的用户;管理员和普通用户。用户只能上传照片,只有管理员可以访问照片的 url。

我上传文件的文件夹结构:./public/uploads/teacher/

这是我的代码:

server.js

// This is auth middleware which checks if access token is valid to access API
app.all('/api/*', [require('./validateReq')]);

app.use('/', require('./routes'));
app.use(express.static('public'));

routes/index.js

var teacher = require('./teachers.js');

router.post('/upload', teacher.uploadAvatar);

routes/teachers.js

var multer      = require('multer');
var upload      = multer({ dest: 'uploads/teacher/' }).single('avatar');

uploadAvatar: function(req, res) {
    upload(req, res, function(err) {
        console.log(req.body);
        console.log(req.file);

        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
}

如果用户上传文件john_doe.png,我如何将以下网址的访问权限限制为仅限教师/管理员,使其不公开:localhost:8000/uploads/teacher/john_doe.png。在这种情况下,最佳做法是什么?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    这与在返回资源之前添加身份验证过程没有什么不同。有多种方法可以解决。例如,在最基本的关卡中,您可以使用basic authentication header。您还可以使用 cookie(特别是 httpOnly cookie)来传递授权 cookie 等。

    看到您已经有类似的中间件,您可以使用它来检查用户是否具有管理员权限,然后再授权他们查看资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2023-03-25
      • 2014-02-18
      • 2012-06-12
      相关资源
      最近更新 更多