เพื่อช่วยให้คุณช่วยให้ผู้ใช้ควบคุมข้อมูลของตนได้ ทีม Firebase ได้สร้างไลบรารีที่ทำให้กระบวนการข้อมูลผู้ใช้ทั่วไปสองขั้นตอนง่ายขึ้น:
clearData
: ลบข้อมูลของผู้ใช้ออกจากบริการ Firebase เฉพาะ (ปัจจุบันคือ Realtime Database, Firestore และ Storage) เมื่อพวกเขาลบบัญชีผ่าน Firebase AuthenticationexportData
: บันทึกสำเนาข้อมูลของผู้ใช้จากบริการ Firebase ไปยังสตริง JSON และอัปโหลดไปยัง Cloud Storage เพื่อให้ผู้ใช้ดาวน์โหลดด้วยตนเองได้อย่างง่ายดาย
อ่านต่อเพื่อดูวิธีเพิ่มฟังก์ชันลงในแอปของคุณ หรือข้ามไปที่โค้ดที่ repo GitHub ความเป็นส่วนตัวของผู้ใช้ Firebase
เพิ่ม clearData
หรือ exportData
ไปยังแอปของคุณ
ฟังก์ชัน clearData
และ exportData
ในไลบรารีถูกนำมาใช้เป็นฟังก์ชันคลาวด์ที่ทำงานกับข้อมูลในฐานข้อมูลเรียลไทม์, Cloud Storage และ Cloud Firestore การเพิ่มฟังก์ชันในแอปของคุณเองมีขั้นตอนสามขั้นตอน:
- แก้ไขไฟล์
user_privacy.json
ของไลบรารีเพื่อให้สอดคล้องกับสคีมา Realtime Database, Cloud Firestore และ Cloud Storage ของแอป - ปรับใช้
clearData
และexportData
เป็นฟังก์ชันคลาวด์ - ติดตั้งทริกเกอร์สำหรับฟังก์ชันต่างๆ ในแอปของคุณ
- รักษาความปลอดภัยข้อมูล
clearData
ด้วยกฎการจัดเก็บ
แก้ไขไฟล์ user_privacy.json
ของไลบรารี
ในการเริ่มต้น ให้โคลนหรือดาวน์โหลด repo GitHub ความเป็นส่วนตัวของผู้ใช้ Firebase
เมื่อคุณดำเนินการเสร็จแล้ว ให้เปิด functions/user_privacy.json
ในโปรแกรมแก้ไขข้อความ ไฟล์ json มีชุดเส้นทางที่ปรับแต่งได้ซึ่งฟังก์ชัน clearData
และ exportData
ใช้เพื่อค้นหาข้อมูลแอปของคุณใน Realtime Database, Cloud Firestore และ Cloud Storage หากแอปของคุณใช้บริการเหล่านั้นเพียงหนึ่งหรือสองบริการ ให้เริ่มด้วยการลบออบเจ็กต์ JSON ที่เชื่อมโยงกับบริการที่ไม่ได้ใช้
เมื่อออบเจ็กต์หายไป คุณสามารถเริ่มแทนที่ค่าตัวแทนของบริการที่เหลือด้วยโครงสร้างข้อมูลจริงที่แอปของคุณใช้
เพิ่มเส้นทางฐานข้อมูลเรียลไทม์ให้กับข้อมูลผู้ใช้
หากต้องการปรับแต่ง 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 แล้ว ให้เพิ่มฟังก์ชัน clearData
และ exportData
ให้กับโปรเจ็กต์ของคุณ:
- คัดลอก
user_data.json
ที่คุณกำหนดเองไปยังไดเร็กทอรีfunctions
ของคุณ - คัดลอกโค้ดจากไลบรารีความเป็นส่วนตัวของผู้ใช้
index.js
ไปยังindex.js
ของโปรเจ็กต์ของคุณ- หากคุณไม่ได้ใช้
clearData
ให้ละเว้นฟังก์ชันclearData
,clearDatabaseData
,clearFirestoreData
และclearStorageData
- หากคุณไม่ได้ใช้
exportData
ให้ละเว้นฟังก์ชันexportData
,exportDatabaseData
,exportFirestoreData
และexportStorageData
- หากคุณไม่ได้ใช้
- ปรับใช้ฟังก์ชันของคุณ
ใช้ทริกเกอร์สำหรับ clearData
และ exportData
แต่ละฟังก์ชันต้องการทริกเกอร์ที่แตกต่างกัน:
-
clearData
: ทริกเกอร์เมื่อผู้ใช้ลบบัญชีของตนผ่านการรับรองความถูกต้อง -
exportData
: ทริกเกอร์โดยคำขอ HTTP
ใช้ทริกเกอร์ clearData
หากต้องการทริกเกอร์เหตุการณ์ clearData
คุณต้องใช้วิธีการจากการตรวจสอบสิทธิ์ หากคุณยังไม่ได้ดำเนินการ ให้เพิ่มการตรวจสอบสิทธิ์ให้กับแอปของคุณ: แพลตฟอร์มของ Apple , Android หรือ เว็บ
จากนั้น เพิ่มวิธีการเรียกใช้วิธี delete
ของ Authentication SDK สำหรับแพลตฟอร์มของคุณ:
ไอโอเอส+
FirebaseAuth.User.delete { error in
if let error = error {
print("Error deleting user: \(error)")
}
}
หุ่นยนต์
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 คุณสามารถเรียกใช้ฟังก์ชัน 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... } }