لمساعدتك في مساعدة المستخدمين على التحكم في بياناتهم، أنشأ فريق Firebase مكتبة تعمل على تبسيط عمليتين شائعتين لبيانات المستخدمين:
clearData
: يحذف هذا الإجراء بيانات المستخدم من خدمات محدّدة في Firebase (وهي حاليًا "قاعدة بيانات الوقت الفعلي" وFirestore و"التخزين") عند حذف حسابه من خلال مصادقة Firebase.exportData
: يحفظ هذا الخيار نسخة من بيانات المستخدم من خدمات Firebase في سلسلة JSON ويحمّلها إلى Cloud Storage ليتمكّن من تنزيلها بسهولة بنفسه.
يمكنك متابعة القراءة لمعرفة كيفية إضافة الوظائف إلى تطبيقك، أو الانتقال مباشرةً إلى الرمز في مستودع GitHub لخصوصية المستخدمين في Firebase.
إضافة clearData
أو exportData
إلى تطبيقك
يتم تنفيذ الدالتين clearData
وexportData
في المكتبة كدوال Cloud تعمل على البيانات في Realtime Database وCloud Storage وCloud Firestore. تتمثل إضافة الدوال في تطبيقك الخاص في عملية من ثلاث خطوات:
- عدِّل ملف
user_privacy.json
الخاص بالمكتبة ليعكس مخطط "قاعدة بيانات الوقت الفعلي" وCloud Firestore وCloud Storage لتطبيقك. - نشر
clearData
وexportData
كدوال Cloud. - تنفيذ مشغلات للوظائف في تطبيقك.
- يمكنك تأمين بيانات "
clearData
" باستخدام قواعد مساحة التخزين.
تعديل ملف user_privacy.json
للمكتبة
للبدء، عليك إنشاء نسخة طبق الأصل من مستودع GitHub لخصوصية المستخدمين في Firebase أو تنزيله.
عند الانتهاء من ذلك، افتح functions/user_privacy.json
في محرِّر نصوص. يتضمّن ملف json سلسلة من المسارات القابلة للتخصيص التي تستخدمها الدالتان clearData
وexportData
للعثور على بيانات تطبيقك في Realtime Database وCloud Firestore وCloud Storage. إذا كان تطبيقك يستخدم خدمة واحدة أو اثنتين فقط من هذه الخدمات، ابدأ بحذف عناصر JSON المرتبطة بالخدمات غير المستخدَمة.
عند إزالة العناصر، يمكنك البدء في استبدال قيم العنصر النائب للخدمات المتبقية بهياكل البيانات الفعلية التي يستخدمها تطبيقك.
إضافة مسارات قاعدة البيانات في الوقت الفعلي إلى بيانات المستخدم
لتخصيص user_privacy.json
لمثيل "قاعدة البيانات في الوقت الفعلي" في تطبيقك، استبدِل قائمة سلاسل العناصر النائبة ضمن "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
إذا لم تكن معتادًا على استخدام "دوال Cloud" بعد، يمكنك الاطّلاع على كيفية استخدامها في دليل بدء استخدام دوال Cloud.
بعد أن تشعر بالارتياح تجاه استخدام دوال Cloud، يمكنك إضافة الدالتين 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
الخاصة بحزمة تطوير البرامج (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
إذا كان تطبيقك هو تطبيق ويب مستضاف على استضافة 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... } }