前提・実現したいこと
ユーザーアカウントを削除するボタンを押したら、該当するFirestore
のデータとCloud Storage
にあるユーザー画像を削除するコードを書いています。
js
1const deleteUser = async () => { 2 const currentUser = auth.currentUser; 3 if (!currentUser) return; 4 // Firestoreからユーザー情報を削除 5 db.collection("users").doc(currentUser.uid).delete(); 6 // Cloud Storageからユーザー画像を取得 7 const deleteImage = await storage.ref().child("images/" + currentUser.uid); 8 // ユーザー画像を削除 9 deleteStorage.delete(); 10 currentUser.delete(); 11};
ユーザー画像を更新する際に古いユーザー画像に上書きしたいと思い、ユーザー画像のファイル名はユーザーのuid
にしています。
ユーザー画像をアップロードしていないユーザーには、デフォルトの画像を設定しています。
デフォルトの画像は、publicフォルダから参照しています。
ユーザー画像を削除する前に、ユーザー画像が存在しているかチェックし、ユーザー画像があれば削除するようにしたいです。
発生している問題・エラーメッセージ
Cloud Storageにユーザー画像が無い状態でアカウントを削除すると、コンソールに下記のメッセージが表示されます。
Uncaught FirebaseStorageError code: (...) code_: "storage/object-not-found" message: (...) message_: "Firebase Storage: Object 'images/hogehoge' does not exist." name: (...) name_: "FirebaseError" serverResponse: (...) serverResponse_: "{↵ "error": {↵ "code": 404,↵ "message": "Not Found. Could not delete object",↵ "status": "DELETE_OBJECT"↵ }↵}" __proto__: Object
試したこと
このページに書かれている.listAll()
メソッドでストレージ内のファイルを取得できると読み取ったので、このメソッドでファイルを取得して何も取得できなければ削除、という処理ができるかと思い、.listAll()
を下記のように実行してみました。
js
1const deleteUser = async () => { 2 const currentUser = auth.currentUser; 3 if (!currentUser) return; 4 db.collection("users").doc(currentUser.uid).delete(); 5 const deleteImage = await storage.ref().child("images/" + currentUser.uid); 6 // .listAll()で何が表示されるか確認 7 console.log(deleteImage.listAll()) 8 deleteStorage.delete(); 9 currentUser.delete(); 10};
ユーザー画像をアップロードした状態で削除を実行したところ、下記のエラーがコンソールに表示されました。
Uncaught (in promise) FirebaseStorageError {code_: "storage/unknown", message_: "Firebase Storage: An unknown error occurred, please check the error payload for server response.", serverResponse_: "{ "error": { "code": 400, "message": "Li…ules to rules_version = \"2\" to use list."↵ }↵}", name_: "FirebaseError" } code: (...) code_: "storage/unknown" message: (...) message_: "Firebase Storage: An unknown error occurred, please check the error payload for server response." name: (...) name_: "FirebaseError" serverResponse: (...) serverResponse_: "{↵ "error": {↵ "code": 400,↵ "message": "Listing objects in a bucket is disallowed for rules_version = \"1\".\nPlease update storage security rules to rules_version = \"2\" to use list."↵ }↵}" __proto__: Object
あなたの回答
tips
プレビュー