ส่วนขยาย "ลบข้อมูลผู้ใช้" (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}
ตัวอย่างเช่น หากคุณมีคอลเล็กชันusers
และadmins
และคอลเล็กชันแต่ละคอลเล็กชันมีเอกสารที่มีรหัสผู้ใช้เป็นรหัสเอกสาร คุณจะป้อน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 ป้อนเส้นทางแบบเต็มไปยังไฟล์หรือไดเรกทอรีในที่เก็บข้อมูลของคุณ โดยคั่นด้วยคอมมา ใช้
{UID}
เพื่อแสดงรหัสผู้ใช้ของผู้ใช้ที่ถูกลบ และ{DEFAULT}
เพื่อแสดงที่เก็บข้อมูลเริ่มต้นตัวอย่างบางส่วนมีดังนี้
- หากต้องการลบไฟล์ทั้งหมดในที่เก็บข้อมูลเริ่มต้นที่มีรูปแบบการตั้งชื่อไฟล์
{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}
- หากต้องการลบไฟล์ทั้งหมดในที่เก็บข้อมูลเริ่มต้นที่มีรูปแบบการตั้งชื่อไฟล์
ค้นหาข้อมูลที่จะลบ
ส่วนขยายนี้ใช้กลไกบางอย่างในการค้นหาข้อมูลที่จะลบ กลไกเหล่านี้ต้องได้รับการกําหนดค่าอย่างชัดเจนเพื่อให้ส่วนขยายลบข้อมูลได้ ส่วนขยายจะลบเฉพาะข้อมูลที่กําหนดค่าให้ลบโดยชัดแจ้งตามกลไกที่ระบุไว้เท่านั้น
โปรดระมัดระวังความแตกต่างด้านลักษณะการทำงานต่อไปนี้ระหว่างแต่ละบริการ
- Cloud Firestore: ลักษณะการทำงานเริ่มต้นคือการลบเอกสารแบบตื้น (ระบบจะไม่ลบคอลเล็กชันย่อย) หากต้องการลบคอลเล็กชันย่อยทั้งหมดของเอกสารซ้ำ ให้ตั้งค่าตัวเลือก "โหมดลบใน Cloud Firestore" เป็น "Recursive"
- Realtime Database: ข้อมูลทั้งหมดที่โหนดที่ระบุจะถูกลบออก
- พื้นที่เก็บข้อมูล: หากระบุเส้นทางไดเรกทอรี ระบบจะลบไฟล์และไดเรกทอรีย่อยทั้งหมด
ตามเส้นทาง
เมื่อกำหนดค่าเส้นทาง Cloud Firestore, ฐานข้อมูลเรียลไทม์ และ 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")
- ประการที่ 2 หากรหัสคอลเล็กชันไม่ตรงกัน ส่วนขยายจะพยายามระบุและลบเอกสารหากรหัสเอกสารตรงกับ UID ของผู้ใช้
- สุดท้าย ให้ทำดังนี้สำหรับเอกสารแต่ละรายการ ก. หากความลึกในการค้นหาปัจจุบัน (ดูด้านล่าง) น้อยกว่าหรือเท่ากับความลึกในการค้นหาที่กำหนดค่าไว้ ระบบจะทำขั้นตอนนี้ซ้ำสำหรับคอลเล็กชันย่อยทั้งหมดของเอกสารปัจจุบัน ข. หากกําหนดค่าช่องค้นหาไว้แล้ว ส่วนขยายจะตรวจสอบว่าช่องที่ระบุตรงกับ UID ของผู้ใช้หรือไม่ หากพบรายการที่ตรงกัน ระบบจะลบเอกสาร
ความลึกของการค้นหา
ส่วนขยายนี้มีค่าความลึกการค้นหาที่กำหนดค่าได้ (ค่าเริ่มต้นคือ 3) ระบบจะเรียกใช้การเรียกใช้เฉพาะในกรณีที่ความลึกการค้นหาปัจจุบันน้อยกว่าหรือเท่ากับความลึกการค้นหาที่กำหนดค่าไว้ ระดับการค้นหาปัจจุบันจะอิงตามระดับของคอลเล็กชันปัจจุบันหรือคอลเล็กชันหลักของเอกสาร เช่น
/users = 1
/users/<document-id> = 1
/users/<document-id>/comments = 2
/users/<document-id>/comments/<document-id> = 2
ส่วนขยายนี้จะไม่ลบ UID ที่เก็บไว้ในอาร์เรย์หรือแผนที่โดยอัตโนมัติ และจะไม่ค้นหาข้อมูลที่คีย์ตามรหัสผู้ใช้ซึ่งจัดเก็บไว้ในคอลเล็กชันย่อยที่ฝังลึกเกินระดับความลึกที่ระบุไว้ข้างต้น