1

我的应用程序商店使用类似以下方法的文件:

/app
  |-static
  |   |-img
  |   |-css
  |   |-js
  |-server 
  |    |-models
  |    |-routes
  |-files
     |- 594873
          |- file.txt
              .
              .
     |- 393948

文件夹“文件”包含私人用户文件。594873 和 393948 是用户 ID。所以我需要制定一种安全的方法来写入和读取用户的文件。在后端,我使用 NodeJS/express/mongoose。

我需要做这样的事情:

app.get('/getfile/:userid/:filename', function (req, res) {
   // Return file that contains in 'userid' folder and named 'filename'
 });

编辑:

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'static')));
4

1 回答 1

1

假设您使用类似于Passport的东西来验证用户,并且用户对象存储在 中req.user,并且该对象包含一个id属性,您可以创建一个中间件来检查正确的访问权限:

var checkValidUser = function(req, res, next) {
  if (req.user && req.user.id && req.user.id === req.params.userid)
  {
    // user has access, calling 'next()' will pass the request to the handler
    next();
  }
  else
  {
    // user doesn't have access, return an HTTP 401 response
    res.send(401, 'Unauthorized');
  }
};

app.get('/getfile/:userid/:filename', checkValidUser, function (req, res) {
  // this will only be called when 'checkValidUser' allowed access to this file
  res.sendfile('./files/' + req.params.userid + '/' + req.params.filename); 
});
于 2013-04-30T13:35:53.540 回答