Nodejs Express 4 Multer | 如果用户未经授权,请停止上传文件

Lor*_*oGi 8 node.js express multer

我正在使用multerexpress4作为multipart middelware.

Express配置为使用护照作为auth middelware,但如果用户未经过身份验证,我找不到阻止文件上载的方法.

我想使用onFileUploadStart拒绝该文件,但我找不到带有"request"对象的链接,用它可以匹配用户.

下面的代码用于配置express vs multer:

...
// Multipart file upload
app.use(multer(
{
  dest: wwwroot + path.sep + 'uploaded' + path.sep, 
  onFileUploadStart: function (file) {
    //TODO : apply security check : user auth, file size, number...
    console.log(file.fieldname + ' is starting ...')
},
onFileUploadComplete: function (file) {
    console.log(file.fieldname + ' uploaded to  ' + file.path)
}
}));
...
app.use(passport.auth.initialize());
app.use(passport.auth.session());   
Run Code Online (Sandbox Code Playgroud)

mor*_*och 7

编辑

我将在下面留下的情况下,它可以帮助,但得到的答复居然是很简单的答案是:你需要在两个通话移动到app.use(passport) 上面调用app.use(multer).快速链中的每个步骤都按顺序处理,因此如果您希望拒绝执行错误的auth尝试,请处理传入文件上载之前执行此操作.


可能有更好的方法来做到这一点,但这应该让你开始.更改您的快速配置以使用闭包,您将拥有对该req变量的完全访问权限.

app.use(function(req, res, next) {
  var handler = multer({
    dest: wwwroot + path.sep + 'uploaded' + path.sep, 
    onFileUploadStart: function (file) {
      // You now have access to req
      console.dir(req);
      console.log(file.fieldname + ' is starting ...')
    },
    onFileUploadComplete: function (file) {
      console.log(file.fieldname + ' uploaded to  ' + file.path)
    }
  });
  handler(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)

  • 请注意`app.use(multer)`会影响**所有**路线.在我的例子中,支持几种方法,诀窍是在身份验证功能和我的控制器功能之间插入multer:`router.post('/',auth.hasRole('admin'),multer(uploadPreferences),controller.创建);` (3认同)

小智 0

来自 multer api 文档“您甚至可以停止上传文件 - 只需从事件处理程序返回 false。该文件将不会被处理或到达文件系统。”