เพื่อช่วยให้ผู้ใช้ควบคุมข้อมูลของตัวเองได้ ทีม Firebase จึงได้สร้างไลบรารีที่ช่วยลดความซับซ้อนของกระบวนการข้อมูลผู้ใช้ทั่วไป 2 แบบดังนี้
clearData
: ลบข้อมูลของผู้ใช้จากบริการ Firebase ที่เฉพาะเจาะจง (ปัจจุบัน Realtime Database, Firestore และพื้นที่เก็บข้อมูล) เมื่อผู้ใช้ลบบัญชี จนถึงวันที่ Firebase AuthenticationexportData
: บันทึกสำเนาข้อมูลของผู้ใช้จากบริการ Firebase ลงในสตริง JSON และอัปโหลดไปยัง Cloud Storage เพื่อให้ดาวน์โหลดด้วยตนเองได้อย่างง่ายดาย
อ่านต่อเพื่อดูวิธีเพิ่มฟังก์ชันลงในแอป หรือข้ามไปที่โค้ดที่ พื้นที่เก็บข้อมูลใน GitHub สำหรับความเป็นส่วนตัวของผู้ใช้ของ Firebase
เพิ่ม clearData
หรือ exportData
ลงในแอป
ฟังก์ชัน clearData
และ exportData
ในคลังจะได้รับการนำไปใช้เป็น Cloud Functions ที่ดำเนินการกับข้อมูลใน Realtime Database, Cloud Storage และ Cloud Firestore การเพิ่มฟังก์ชันในแอปของคุณเองมี 3 ขั้นตอนดังนี้
- แก้ไขไฟล์
user_privacy.json
ของไลบรารีเพื่อแสดงสคีมา Realtime Database, Cloud Firestore และ Cloud Storage ของแอป - ทำให้
clearData
และexportData
ใช้งานได้ในฐานะ Cloud Functions - ใช้ทริกเกอร์สำหรับฟังก์ชันในแอป
- รักษาความปลอดภัยของข้อมูล
clearData
ด้วยกฎพื้นที่เก็บข้อมูล
แก้ไขไฟล์ user_privacy.json
ของไลบรารี
หากต้องการเริ่มต้นใช้งาน ให้โคลนหรือดาวน์โหลดพื้นที่เก็บข้อมูลใน GitHub ด้านความเป็นส่วนตัวของผู้ใช้ Firebase
เมื่อเสร็จแล้ว ให้เปิด functions/user_privacy.json
ในโปรแกรมแก้ไขข้อความ ไฟล์ JSON มีชุดเส้นทางที่ปรับแต่งได้ซึ่งฟังก์ชัน clearData
และ exportData
ใช้เพื่อค้นหาข้อมูลของแอปใน Realtime Database, Cloud Firestore และ Cloud Storage หากแอปใช้บริการเหล่านั้นเพียง 1 หรือ 2 บริการ ให้เริ่มด้วยการลบออบเจ็กต์ JSON ที่เชื่อมโยงกับบริการที่ไม่ได้ใช้
เมื่อวัตถุหายไปแล้ว คุณก็สามารถเริ่มแทนที่บริการที่เหลือได้ ค่าตัวยึดตำแหน่งซึ่งมีโครงสร้างข้อมูลจริงที่แอปใช้
เพิ่มเส้นทาง Realtime Database ไปยังข้อมูลผู้ใช้
หากต้องการปรับแต่ง user_privacy.json
สำหรับอินสแตนซ์ Realtime Database ของแอป ให้แทนที่รายการสตริงตัวยึดตำแหน่งภายใต้ "database"
ด้วยเส้นทางจริงไปยังข้อมูลผู้ใช้ ดังนี้
... "database": { "clear": [ "/users/UID_VARIABLE", // Replace with your "/admins/UID_VARIABLE" // actual RTDB paths ], "export": [ "/users/UID_VARIABLE", // Replace with your "/admins/UID_VARIABLE" // actual RTDB paths ] }, ...
หากต้องการเพิ่มฟังก์ชันใดฟังก์ชันหนึ่งลงในแอปเท่านั้น ให้คุณลบออบเจ็กต์ของฟังก์ชันดังกล่าวแทนการป้อนข้อมูล
เพิ่มออบเจ็กต์ Cloud Firestore รายการที่มีข้อมูลผู้ใช้
หากต้องการปรับแต่ง user_privacy.json
สำหรับอินสแตนซ์ Cloud Firestore ของแอป ให้แทนที่รายการออบเจ็กต์ตัวยึดตำแหน่งภายใต้ "firestore"
ด้วยออบเจ็กต์ Cloud Firestore จริงที่มีข้อมูลผู้ใช้
... "firestore": { "clear": [ {"collection": "users", "doc": "UID_VARIABLE", "field": "name"}, {"collection": "users", "doc": "UID_VARIABLE"}, // Replace with your {"collection": "admins", "doc": "UID_VARIABLE"} // actual Firestore paths ], "export": [ {"collection": "users", "doc": "UID_VARIABLE", "field": "name"}, {"collection": "users", "doc": "UID_VARIABLE"}, // Replace with your {"collection": "admins", "doc": "UID_VARIABLE"} // actual Firestore paths ] }, ...
หากต้องการเพิ่มฟังก์ชันใดฟังก์ชันหนึ่งลงในแอปเท่านั้น ให้คุณลบออบเจ็กต์ของฟังก์ชันดังกล่าวแทนการป้อนข้อมูล
เพิ่มที่เก็บข้อมูล Cloud Storage และชื่อไฟล์พร้อมข้อมูลผู้ใช้
หากต้องการปรับแต่ง user_privacy.json
สำหรับอินสแตนซ์ Cloud Storage ของแอป ให้แทนที่ที่เก็บข้อมูลของพื้นที่เก็บข้อมูลตัวยึดตำแหน่งและชื่อไฟล์ภายใต้ "storage"
ด้วยค่าจริงดังนี้
... "storage": { "clear": [ // Replace with your actual storage data ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"], ["clear-exportappspot.com", "UID_VARIABLE"] ], "export": [ // Replace with your actual storage data ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"] ] }, ...
หากต้องการเพิ่มฟังก์ชันใดฟังก์ชันหนึ่งลงในแอปเท่านั้น ให้คุณลบออบเจ็กต์ของฟังก์ชันดังกล่าวแทนการป้อนข้อมูล
ทำให้ clearData
และ exportData
ใช้งานได้เป็น Cloud Functions
หากคุณไม่คุ้นเคยกับ Cloud Functions โปรดอ่านวิธีการใช้งานในCloud Functionsคู่มือเริ่มต้นใช้งาน
เมื่อคุ้นเคยกับ Cloud Functions แล้ว ให้เพิ่มฟังก์ชัน clearData
และ exportData
ลงในโปรเจ็กต์ ดังนี้
- คัดลอก
user_data.json
ที่ปรับแต่งแล้วไปยังไดเรกทอรีfunctions
- คัดลอกโค้ดจาก
index.js
ของไลบรารีความเป็นส่วนตัวของผู้ใช้ไปยังindex.js
ของโปรเจ็กต์- หากไม่ได้ใช้
clearData
ให้ข้ามฟังก์ชันclearData
,clearDatabaseData
,clearFirestoreData
และclearStorageData
- หากไม่ได้ใช้
exportData
ให้ข้ามฟังก์ชันexportData
,exportDatabaseData
,exportFirestoreData
และexportStorageData
- หากไม่ได้ใช้
- ทำให้ฟังก์ชันใช้งานได้
ใช้ทริกเกอร์สำหรับ clearData
และ exportData
แต่ละฟังก์ชันต้องการทริกเกอร์ที่แตกต่างกัน ดังนี้
clearData
: ทริกเกอร์เมื่อผู้ใช้ลบบัญชีผ่าน AuthenticationexportData
: ทริกเกอร์โดยคำขอ HTTP
ใช้ทริกเกอร์ clearData
หากต้องการทริกเกอร์เหตุการณ์ clearData
คุณต้องใช้เมธอดจาก Authentication หากคุณ
หากยังไม่ได้ทำ ให้เพิ่ม Authentication ลงในแอปแพลตฟอร์มของ Apple, Android หรือเว็บ
จากนั้นเพิ่มวิธีเรียกใช้เมธอด delete
ของ Authentication SDK สำหรับแพลตฟอร์มของคุณ ดังนี้
iOS ขึ้นไป
FirebaseAuth.User.delete { error in
if let error = error {
print("Error deleting user: \(error)")
}
}
Android
FirebaseAuth.getCurrentUser().delete();
เว็บ
firebase.auth().currentUser.delete().catch(function(error) {
if (error.code === 'auth/requires-recent-login') {
window.alert('Please sign-in and try again.');
firebase.auth().signOut();
}
});
ใช้ทริกเกอร์ exportData
หากต้องการใช้ทริกเกอร์ exportData
ให้เพิ่มปุ่มหรือลิงก์ไปยังแอปซึ่งเรียกใช้
ฟังก์ชันดังกล่าวผ่านคำขอ HTTP อ่านเพิ่มเติมเกี่ยวกับการเรียกใช้ฟังก์ชัน
ผ่าน HTTP ในฟังก์ชันการเรียกผ่านคำขอ HTTP
รายละเอียดคำขอ
- ประเภท:
POST
- URL:
https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
- เนื้อความ:
<var>CURRENT_USER'S_UID</var>
เรียกใช้ฟังก์ชันใน Firebase Hosting โดยตรง
หากแอปของคุณเป็นเว็บแอปที่โฮสต์บน Firebase Hosting คุณสามารถเรียกใช้
clearData
ทำฟังก์ชันผ่านรายการ rewrite
ในไฟล์ firebase.json
ของเว็บไซต์ดังนี้
"hosting": {
"rewrites": [
{"source": "/exportData", "function": "exportData"}
]
}
รักษาความปลอดภัยของข้อมูล exportData
ด้วยกฎพื้นที่เก็บข้อมูล
หากต้องการรักษาผู้ใช้ ข้อมูลที่ส่งออกเป็นส่วนตัว เพิ่ม Cloud Storage กฎที่จำกัดการเข้าถึงของผู้ใช้ที่ส่งออก
- ไปที่พื้นที่เก็บข้อมูลในคอนโซล Firebase
- เปิดแท็บกฎ
- วางกฎต่อไปนี้ แล้วคลิกเผยแพร่
service firebase.storage { match /b/{bucket}/o { match /exportData { // Only allow access to the user who requested the export match /{uid} { allow read, write: if request.auth.uid == uid } match /{uid}/{path=**} { allow read, write: if request.auth.uid == uid } } // Other application rules... } }