การใช้ส่วนขยายลบข้อมูลผู้ใช้

ส่วนขยายลบข้อมูลผู้ใช้ (delete-user-data) ช่วยให้คุณลบข้อมูลผู้ใช้เมื่อมีการลบผู้ใช้ออกจากโปรเจ็กต์ Firebase คุณกำหนดค่าส่วนขยายนี้เพื่อลบข้อมูลผู้ใช้จาก Cloud Firestore, Realtime Database หรือ Cloud Storage ได้ ทริกเกอร์ส่วนขยายแต่ละตัวเพื่อลบข้อมูลจะคีย์อยู่ที่ UserId ของผู้ใช้

ส่วนขยายนี้มีประโยชน์สำหรับการเคารพความเป็นส่วนตัวของผู้ใช้และปฏิบัติตามข้อกำหนด อย่างไรก็ตาม การใช้ส่วนขยายนี้ไม่ได้เป็นการรับประกันว่าจะปฏิบัติตามกฎระเบียบของรัฐบาลและอุตสาหกรรม

สิ่งที่ต้องดำเนินการก่อน

  • คุณต้องใช้การตรวจสอบสิทธิ์ของ Firebase เพื่อจัดการผู้ใช้

  • ส่วนขยายนี้จะลบข้อมูลจาก Cloud Firestore, Realtime Database และ Cloud Storage หากจัดเก็บข้อมูลผู้ใช้ไว้ที่อื่น คุณควรลบข้อมูลผู้ใช้จากแหล่งที่มาเหล่านั้นด้วยเมื่อลบผู้ใช้

ติดตั้งส่วนขยาย

หากต้องการติดตั้งส่วนขยาย ให้ทำตามขั้นตอนในหน้าติดตั้งส่วนขยาย Firebase โดยสรุป ให้ทําอย่างใดอย่างหนึ่งต่อไปนี้

ในระหว่างการติดตั้งส่วนขยาย คุณจะได้รับข้อความแจ้งให้ระบุพารามิเตอร์การกำหนดค่าจำนวนหนึ่งดังนี้

  • ตำแหน่ง Cloud Functions:

    เลือกตำแหน่งที่คุณต้องการทำให้ฟังก์ชันที่สร้างขึ้นสำหรับส่วนขยายนี้ใช้งานได้ โดยปกติแล้วคุณจะต้องการตำแหน่งที่ตั้งที่อยู่ใกล้กับฐานข้อมูล สำหรับความช่วยเหลือในการเลือกสถานที่ตั้ง โปรดดูคู่มือการเลือกตำแหน่ง

  • เส้นทาง Cloud Firestore:

    เส้นทางใดในอินสแตนซ์ Cloud Firestore ที่มีข้อมูลผู้ใช้ เว้นว่างไว้หากคุณไม่ได้ใช้ Cloud Firestore ป้อนเส้นทางแบบเต็มโดยคั่นด้วยคอมมา คุณสามารถแสดงรหัสผู้ใช้ของผู้ใช้ที่ถูกลบด้วย {UID} เช่น หากคุณมีคอลเล็กชัน 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} เช่น users/{UID},admins/{UID}

  • เส้นทาง Cloud Storage:

    คุณจัดเก็บข้อมูลผู้ใช้ไว้ที่ใดใน Google Cloud Storage เว้นว่างไว้หากคุณไม่ได้ใช้ Cloud Storage ป้อนเส้นทางแบบเต็มไปยังไฟล์หรือไดเรกทอรีในที่เก็บข้อมูล Storage โดยคั่นด้วยคอมมา ใช้ {UID} เพื่อแสดงรหัสผู้ใช้ของผู้ใช้ที่ถูกลบ และใช้ {DEFAULT} เพื่อแสดงที่เก็บข้อมูล Storage เริ่มต้น

    ต่อไปนี้เป็นตัวอย่าง

    • หากต้องการลบไฟล์ทั้งหมดในที่เก็บข้อมูลเริ่มต้นที่มีรูปแบบการตั้งชื่อไฟล์เป็น {UID}-pic.png ให้ป้อน {DEFAULT}/{UID}-pic.png
    • หากต้องการลบไฟล์ทั้งหมดในที่เก็บข้อมูลอื่นที่ชื่อว่า my-app-logs ซึ่งมีรูปแบบการตั้งชื่อไฟล์เป็น {UID}-logs.txt ให้ป้อน {DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt
    • หากต้องการลบไดเรกทอรีที่ติดป้ายกำกับรหัสผู้ใช้และไฟล์ทั้งหมด (เช่น media/{UID}) ด้วย ให้ป้อน {DEFAULT}/{UID}-pic.png,my-app-logs/{UID}-logs.txt,{DEFAULT}/media/{UID}

กำลังค้นหาข้อมูลที่จะลบ

มีกลไก 2-3 รายการที่ส่วนขยายนี้ใช้เพื่อค้นหาข้อมูลที่จะลบ กลไกเหล่านี้ต้องได้รับการกำหนดค่าอย่างชัดเจนเพื่อให้ส่วนขยายลบข้อมูล ส่วนขยายจะลบเฉพาะข้อมูลที่กำหนดค่าให้ลบอย่างชัดเจนตามกลไกที่ระบุ

โปรดระมัดระวังความแตกต่างด้านลักษณะการทำงานต่อไปนี้ระหว่างแต่ละบริการ

  • Cloud Firestore: ลักษณะการทำงานเริ่มต้นคือการลบเอกสารแบบตื้น (ระบบจะไม่ลบคอลเล็กชันย่อย) หากต้องการลบคอลเล็กชันย่อยทั้งหมดของเอกสารซ้ำ ให้ตั้งค่าตัวเลือก "โหมดลบใน Cloud Firestore" เป็น "Recursive"
  • Realtime Database: ข้อมูลทั้งหมดที่โหนดที่ระบุจะถูกลบออก
  • พื้นที่เก็บข้อมูล: หากระบุเส้นทางไดเรกทอรีไว้ ไฟล์และไดเรกทอรีย่อยทั้งหมดจะถูกลบ

ตามเส้นทาง

เมื่อกำหนดค่า 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 ที่จะลบได้โดยอัตโนมัติ ให้ตั้งค่าพารามิเตอร์การกำหนดค่า "เปิดใช้การค้นพบอัตโนมัติ" เป็น "ใช่"

การค้นพบอัตโนมัติทำงานโดยการข้ามฐานข้อมูลโดยอัตโนมัติเพื่อค้นหาคอลเล็กชันและเอกสารที่ควรลบตามการกำหนดค่าของคุณ ส่วนขยายจะระบุคอลเล็กชันและเอกสารด้วยวิธีการต่อไปนี้

  1. ก่อนอื่น ส่วนขยายจะค้นหาคอลเล็กชันรูททั้งหมดในฐานข้อมูล หากรหัสของคอลเล็กชันตรงกับรหัสของ UID ของผู้ใช้ ระบบจะลบคอลเล็กชันทั้งคอลเล็กชัน (การลบเป็นแบบเกิดซ้ำหรือแบบตื้น ขึ้นอยู่กับการกำหนดค่าของส่วนขยายสำหรับ "โหมดลบใน Cloud Firestore")
  2. ข้อสอง หากรหัสคอลเล็กชันไม่ตรงกัน ส่วนขยาย��ะพยายามระบุและลบเอกสารหากรหัสเอกสารตรงกับรหัส UID ของผู้ใช้
  3. สุดท้าย สำหรับเอกสารแต่ละรายการ ให้ทำดังนี้ ก. ถ้าความลึกของการค้นหาปัจจุบัน (ดูด้านล่าง) น้อยกว่าหรือเท่ากับความลึกการค้นหาที่กำหนดค่าไว้ ระบบจะทำซ้ำกระบวนการในคอลเล็กชันย่อยของเอกสารปัจจุบันทั้งหมด ข. หากกำหนดค่าช่องค้นหาแล้ว ส่วนขยายจะตรวจสอบว่าช่องที่ระบุตรงกับ UID ของผู้ใช้หรือไม่ หากพบรายการที่ตรงกัน ระบบจะลบเอกสารออก

ความลึกของการค้นหา

ส่วนขยายมีค่าความลึกของการค้นหาที่กำหนดค่าได้ (ค่าเริ่มต้นคือ 3) ระบบจะดำเนินการข้ามผ่านก็ต่อเมื่อความลึกการค้นหาปัจจุบันน้อยกว่าหรือเท่ากับความลึกการค้นหาที่กำหนดค่าไว้เท่านั้น ความลึกของการค้นหาปัจจุบันจะอิงตามความลึกของคอลเล็กชันปัจจุบันหรือคอลเล็กชันหลักของเอกสาร เช่น

/users = 1
/users/<document-id> = 1
/users/<document-id>/comments = 2
/users/<document-id>/comments/<document-id> = 2

ส่วนขยายนี้จะไม่ลบ UID ที่เก็บไว้ในอาร์เรย์หรือแมปโดยอัตโนมัติ และจะไม่ค้นหาข้อมูลที่คีย์โดย User ID ที่จัดเก็บไว้ในคอลเล็กชันย่อยที่ซ้อนกันอยู่นอกเหนือจากความลึกที่ระบุข้างต้น