2015-12-15 23 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(網格文件系統)功能來存儲文件。當你存儲文件時,你也可以添加元數據,在你的情況下,它將是用戶ID或用戶的數據庫記錄ID,所以你可以用查詢。