2016-01-26 3 views
0

Я использую Multer для загрузки некоторых файлов, и мне интересно, какой будет рекомендуемый способ защитить доступ к этим файлам после загрузки.Защитить загруженные файлы и предоставить доступ только авторизованным пользователям

У меня есть 2 типа пользователей; администратора и обычного пользователя. Пользователи могут загружать фотографии, и только администратор может получить доступ к 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')); 

маршруты/index.js

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

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

маршруты/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. Какая была бы лучшая практика в таких ситуациях?

ответ

0

Это не что иное, как добавление процесса аутентификации перед возвратом ресурсов. Есть разные способы обойти это. Например, на самом базовом уровне вы можете использовать basic authentication header. Вы также можете использовать файлы cookie (в частности, cookie httpOnly) для передачи файлов cookie авторизации и т. Д.

Увидев, что у вас уже есть промежуточное ПО для чего-то подобного, вы можете использовать его, чтобы проверить, имеет ли пользователь права администратора, прежде чем разрешать им просматривать ресурс.

Смежные вопросы