2015-12-15 2 views
0

Я создаю приложение Node.js/Express, которое позволяет пользователям загружать файлы (изображения, звуки ...), но я не хочу, чтобы пользователи просто вводили URL-адрес файла и обращались к нему, я хочу подтвердить пользователя идентичность и является ли пользователь является владельцем этого файла и я имел несколько идей о том, как это сделатьограничение доступа к загруженным пользователем файлам в nodejs?

  • сделать файлы назвать непредсказуемым, как путем добавления UUID или что-то подобное (но на самом деле не решает проблема) просто затрудняет пользователям поиск путей к файлам.
  • Сохраните файлы в строке базы данных, но из того, что я прочитал, на самом деле не самая лучшая идея.
  • создать отдельный сервер, который подтверждает идентификатор пользователя и владельца файла перед отправкой файла или добавлением его функций на мой сервер API.

так как вы думаете, лучший вариант или у вас есть лучшие идеи и как делают большие снимки, подобные Facebook?

+0

Я думаю, по крайней мере, вам нужно поддерживать пару , в таблице в базе данных или в любом постоянном магазине. Вам не нужно хранить содержимое файла в базе данных на самом деле, любая файловая система должна быть в порядке. Затем, основываясь на информации о владельце файла, вы можете поддерживать базовый ACL – Dere0405

ответ

1

Идите с UUID, но не просто делайте файлы доступными как статические ресурсы. Они все равно должны оставаться за функцией аутентификации. Сохраните UUID в базе данных для пользователя, которому принадлежит этот файл. Затем функция аутентификации проверяет, принадлежит ли запрашиваемый UUID зарегистрированному пользователю или нет.

Что-то вроде этого:

app.use('/uploads/:uuid', authImage, express.static('uploads')); 
function authImage(req, res, next){ 
    if(req.user.images.contains(req.params.uuid)) 
     next(); 
    else 
     res.status(403).send('Forbidden'); 
} 
0

Вы не упомянули, что вы используете дб. Если вы используете mongodb, вы можете использовать его функцию GFS (Grid File System) для хранения файлов. Когда вы храните файл, вы также можете добавить метаданные, в вашем случае это будет идентификатор пользователя или идентификатор пользователя db, с которым вы можете запросить.

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