我正在構建一個應用程式,用戶可以在其中上傳影像。我使用 firebase 作為后端。現在既然所有登錄用戶都可以上傳,我該如何安全地進行管理?圖片通過 firebase 存盤上傳,然后 URL 保存到 Firestore。我有兩個選擇:
- 將 URL 添加到 Firestore,然后可以上傳影像。這樣做的好處是,在添加新的 Firestore 檔案后,我可以授予用戶上傳檔案的權限。缺點是添加檔案后上傳可能會失敗。這意味著 Firestore 中有一個 URL,而 Storage 中沒有影像。
- 影像上傳到 Storage,然后添加 Firestore 檔案。這樣做的好處是每個檔案都附有影像,但這也意味著每個用戶都可以上傳他們想要的每個影像,而無需我進行任何控制。
我確實使用了 firebase 云函式,但如果我先添加檔案,則會呼叫云函式,而影像可能無法上傳。解決這個問題的最佳方法是什么?
uj5u.com熱心網友回復:
如果您認為可以添加到批處理操作、Firestore 添加操作和 Firebase Storage 檔案上傳操作,并確保兩者都完成,以便您可以擁有一致的資料,請注意這是不可能的。這些操作是不同 Firebase 服務的一部分,不幸的是,目前我正在寫這個答案,您無法將它們設為原子。
據我所知,沒有一個 Firebase 產品支持跨產品事務操作。要解決此問題,您必須在添加/上傳操作期間嵌套呼叫,并在第二個操作失敗時處理錯誤。這意味著如果 Cloud Storage 中的上傳操作失敗,您必須從 Firestore 中洗掉檔案,反之亦然。
但請注意,在某個時間點,會出現客戶端無法回滾其中一個洗掉操作的故障。對于可能發生的這些不可避免的故障,最常見的方法是通過處理例外并在 Firestore 和 Firebase 存盤這兩個地方偶爾執行清理來使您的代碼健壯。
uj5u.com熱心網友回復:
您可以設定像“can_upload_pics”這樣的用戶身份驗證宣告,然后在用戶啟動上傳時檢查此宣告,您可能希望使用 firebase 函式添加自定義宣告。如果做得對,第二個選項將按預期作業,請查看此視頻以獲得自定義宣告的良好解釋和示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365999.html
標籤:火力基地 谷歌云平台 谷歌云firestore 谷歌云功能 火力存储
