ส่วนขยาย Delete User Data (delete-user-data) ช่วยให้คุณลบข้อมูลของผู้ใช้ได้เมื่อลบผู้ใช้ออกจากโปรเจ็กต์ Firebase คุณสามารถกำหนดค่าส่วนขยายนี้ให้ลบข้อมูลผู้ใช้จาก Cloud Firestore, Realtime Database หรือ Cloud Storage ทั้งหมดหรือบางส่วนก็ได้ ทริกเกอร์แต่ละรายการของส่วนขยายสำหรับการลบข้อมูลจะใช้ UserId ของผู้ใช้เป็นคีย์
ส่วนขยายนี้มีประโยชน์ในการเคารพความเป็นส่วนตัวของผู้ใช้และปฏิบัติตามข้อกำหนดด้านการปฏิบัติตามกฎระเบียบ อย่างไรก็ตาม การใช้ส่วนขยายนี้ไม่ได้รับประกันการปฏิบัติตามกฎระเบียบของรัฐบาลและอุตสาหกรรม
ข้อกำหนดเบื้องต้น
คุณต้องใช้ Firebase Authentication เพื่อจัดการผู้ใช้
ส่วนขยายนี้จะลบข้อมูลจาก Cloud Firestore, Realtime Database และ Cloud Storage เท่านั้น หากคุณจัดเก็บข้อมูลผู้ใช้ไว้ที่อื่น คุณควรลบข้อมูลผู้ใช้จากแหล่งข้อมูลเหล่านั้นด้วยเมื่อลบผู้ใช้
ติดตั้งส่วนขยาย
หากต้องการติดตั้งส่วนขยาย ให้ทำตามขั้นตอนในหน้า ติดตั้งส่วนขยาย Firebase โดยสรุป ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
คอนโซล Firebase: คลิกปุ่มต่อไปนี้
CLI: เรียกใช้คำสั่งต่อไปนี้
firebase ext:install firebase/delete-user-data --project=projectId-or-alias
ระหว่างการติดตั้งส่วนขยาย ระบบจะแจ้งให้คุณระบุพารามิเตอร์การกำหนดค่าจำนวนหนึ่ง ดังนี้
ตำแหน่ง Cloud Functions:
เลือกตำแหน่งที่ต้องการติดตั้งใช้งานฟังก์ชันที่สร้างขึ้นสำหรับส่วนขยายนี้ โดยปกติแล้วคุณควรเลือกตำแหน่งที่อยู่ใกล้กับฐานข้อมูล หากต้องการความช่วยเหลือในการเลือกตำแหน่ง โปรดดูคู่มือการเลือกตำแหน่ง
เส้นทาง Cloud Firestore:
เส้นทางใดในอินสแตนซ์ Cloud Firestore ที่มีข้อมูลผู้ใช้ เว้นว่างไว้หากคุณไม่ได้ใช้ Cloud Firestore ป้อนเส้นทางแบบเต็มโดยคั่นด้วยคอมมา คุณสามารถใช้
{UID}เพื่อแสดง User ID ของผู้ใช้ที่ถูกลบ ตัวอย่างเช่น หากคุณมีคอลเล็กชันusersและadminsและแต่ละคอลเล็กชันมีเอกสารที่มี User ID เป็นรหัสเอกสาร คุณสามารถป้อนusers/{UID},admins/{UID}โหมดการลบ Cloud Firestore:
(ใช้ได้เฉพาะในกรณีที่คุณใช้พารามิเตอร์
Cloud Firestore paths) คุณต้องการลบเอกสาร Cloud Firestore อย่างไร หากต้องการลบเอกสารในคอลเล็กชันย่อยด้วย ให้ตั้งค่าพารามิเตอร์นี้เป็นrecursiveอินสแตนซ์ Realtime Database:
คุณต้องการลบข้อมูลผู้ใช้จากอินสแตนซ์ Realtime Database ใด
ตำแหน่ง Realtime Database:
(ใช้ได้เฉพาะในกรณีที่คุณระบุพารามิเตอร์
Realtime Database instance) คุณต้องการลบข้อมูลผู้ใช้จากตำแหน่ง Realtime Database ใดเส้นทาง Realtime Database:
เส้นทางใดในอินสแตนซ์ Realtime Database ที่มีข้อมูลผู้ใช้ เว้นว่างไว้หากคุณไม่ได้ใช้ Realtime Database ป้อนเส้นทางแบบเต็มโดยคั่นด้วยคอมมา คุณสามารถใช้
{UID}เพื่อแสดง User ID ของผู้ใช้ที่ถูกลบ เช่นusers/{UID},admins/{UID}เส้นทาง Cloud Storage:
คุณจัดเก็บข้อมูลผู้ใช้ไว้ที่ใดใน Google Cloud Storage เว้นว่างไว้หากคุณไม่ได้ใช้ Cloud Storage ป้อนเส้นทางแบบเต็มไปยังไฟล์หรือไดเรกทอรีใน Bucket ของ Storage โดยคั่นด้วยคอมมา ใช้
{UID}เพื่อแสดง User ID ของผู้ใช้ที่ถูกลบ และใช้{DEFAULT}เพื่อแสดง Bucket ของ Storage เริ่มต้นตัวอย่างมีดังนี้
- หากต้องการลบไฟล์ทั้งหมดใน Bucket เริ่มต้นที่มีรูปแบบการตั้งชื่อไฟล์เป็น
{UID}-pic.pngให้ป้อน{DEFAULT}/{UID}-pic.png - หากต้องการลบไฟล์ทั้งหมดใน Bucket อื่นที่ชื่อ
my-app-logsซึ่งมีรูปแบบการตั้งชื่อไฟล์เป็น{UID}-logs.txtด้วย ให้ป้อน{DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt - หากต้องการลบไดเรกทอรีที่มีป้ายกำกับ User ID และไฟล์ทั้งหมดในไดเรกทอรีนั้น (เช่น
media/{UID}) ด้วย ให้ป้อน{DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt,{DEFAULT}/media/{UID}
- หากต้องการลบไฟล์ทั้งหมดใน Bucket เริ่มต้นที่มีรูปแบบการตั้งชื่อไฟล์เป็น
การค้นหาข้อมูลที่จะลบ
ส่วนขยายนี้ใช้กลไก 2-3 อย่างเพื่อค้นหาข้อมูลที่จะลบ คุณต้องกำหนดค่ากลไกเหล่านี้อย่างชัดเจนเพื่อให้ส่วนขยายลบข้อมูลได้ ส่วนขยายจะลบเฉพาะข้อมูลที่กำหนดค่าอย่างชัดเจนให้ลบตามกลไกที่ระบุไว้
โปรดทราบถึงความแตกต่างของลักษณะการทำงานระหว่างบริการแต่ละรายการ ดังนี้
- Cloud Firestore: ลักษณะการทำงานเริ่มต้นคือการลบเอกสารแบบตื้น (ระบบจะไม่ลบคอลเล็กชันย่อย) หากต้องการลบคอลเล็กชันย่อยทั้งหมดของเอกสารแบบเรียกซ้ำ ให้ตั้งค่าตัวเลือก "โหมดการลบ Cloud Firestore" เป็น "เรียกซ้ำ"
- Realtime Database: ระบบจะลบข้อมูลทั้งหมดในโหนดที่ระบุ
- Storage: หากระบุเส้นทางไดเรกทอรี ระบบจะลบไฟล์และไดเรกทอรีย่อยทั้งหมด
ตามเส้นทาง
เมื่อกำหนดค่าเส้นทาง Cloud Firestore, Realtime Database และ Cloud Storage คุณสามารถกำหนดตัวแปร UID ในเส้นทางที่จะแทนที่ด้วย UID ของผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์ เมื่อผู้ใช้ถูกลบ ส่วนขยายจะลบข้อมูลทั้งหมดที่ใช้ UID นั้นเป็นคีย์ในเส้นทางที่กำหนด เช่น
- เส้นทาง Cloud Firestore:
users/{UID},admins/{UID} - เส้นทาง Realtime Database:
likes/{UID} - เส้นทาง Cloud Storage:
{DEFAULT}/uploads/{UID},{DEFAULT}/avatars/{UID}.jpeg
การค้นหาอัตโนมัติ (Cloud Firestore)
หากต้องการเปิดใช้ส่วนขยายให้ค้นหาเอกสาร Firestore ที่จะลบโดยอัตโนมัติ ให้ตั้งค่าพารามิเตอร์การกำหนดค่า "เปิดใช้การค้นหาอัตโนมัติ" เป็น "ใช่"
การค้นหาอัตโนมัติจะทำงานโดยการข้ามผ่านฐานข้อมูลโดยอัตโนมัติเพื่อค้นหาคอลเล็กชันและเอกสารที่ควรลบตามการกำหนดค่าของคุณ ส่วนขยายจะระบุคอลเล็กชันและเอกสารเหล่านั้นด้วยวิธีการต่อไปนี้
- ขั้นแรก ส่วนขยายจะค้นหาคอลเล็กชันรากทั้งหมดในฐานข้อมูล หากรหัสของคอลเล็กชันตรงกับ UID ของผู้ใช้ ระบบจะลบคอลเล็กชันทั้งหมด (การลบจะเป็นแบบเรียกซ้ำหรือแบบตื้น ขึ้นอยู่กับการกำหนดค่าของส่วนขยายสำหรับ "โหมดการลบ Cloud Firestore")
- จากนั้น หากรหัสคอลเล็กชันไม่ตรงกัน ส่วนขยายจะพยายามระบุและลบเอกสารหากรหัสเอกสารตรงกับ UID ของผู้ใช้
- สุดท้าย สำหรับเอกสารแต่ละฉบับ a. หากความลึกของการค้นหาปัจจุบัน (ดูด้านล่าง) น้อยกว่าหรือเท่ากับความลึกของการค้นหาที่กำหนดค่าไว้ ระบบจะทำซ้ำกระบวนการสำหรับคอลเล็กชันย่อยทั้งหมดของเอกสารปัจจุบัน b. หากมีการกำหนดค่าช่องค้นหา ส่วนขยายจะตรวจสอบว่าช่องที่ระบุตรงกับ UID ของผู้ใช้หรือไม่ หากพบรายการที่ตรงกัน ระบบจะลบเอกสาร
ความลึกของการค้นหา
ส่วนขยายมีค่าความลึกของการค้นหาที่กำหนดค่าได้ (ค่าเริ่มต้นคือ 3) ระบบจะดำเนินการข้ามผ่านก็ต่อเมื่อความลึกของการค้นหาปัจจุบันน้อยกว่าหรือเท่ากับความลึกของการค้นหาที่กำหนดค่าไว้ ความลึกของการค้นหาปัจจุบันจะขึ้นอยู่กับความลึกของคอลเล็กชันปัจจุบันหรือคอลเล็กชันระดับบนสุดของเอกสาร เช่น
/users = 1
/users/<document-id> = 1
/users/<document-id>/comments = 2
/users/<document-id>/comments/<document-id> = 2
ส่วนขยายนี้จะไม่ลบ UID ที่จัดเก็บไว้ในอาร์เรย์หรือแผนที่โดยอัตโนมัติ และจะไม่ค้นหาข้อมูลที่ใช้ User ID เป็นคีย์ซึ่งจัดเก็บไว้ในคอลเล็กชันย่อยที่ซ้อนกันลึกเกินกว่าความลึกที่ระบุไว้ข้างต้น