Để giúp người dùng kiểm soát dữ liệu của họ, nhóm Firebase đã tạo ra một thư viện giúp đơn giản hoá 2 quy trình phổ biến đối với dữ liệu người dùng:
clearData
: xóa dữ liệu của người dùng khỏi các dịch vụ Firebase cụ thể (hiện tại Cơ sở dữ liệu theo thời gian thực, Firestore và Storage) khi họ xoá tài khoản của mình thông qua Firebase Authentication.exportData
: lưu bản sao dữ liệu của người dùng trong các dịch vụ Firebase vào một chuỗi JSON, rồi tải dữ liệu đó lên Cloud Storage để người dùng có thể dễ dàng tự tải dữ liệu đó xuống.
Hãy đọc tiếp để tìm hiểu cách thêm các hàm vào ứng dụng hoặc xem ngay mã ở Kho lưu trữ GitHub về quyền riêng tư của người dùng Firebase.
Thêm clearData
hoặc exportData
vào ứng dụng của bạn
Các hàm clearData
và exportData
trong thư viện được triển khai dưới dạng Cloud Functions, hoạt động trên dữ liệu trong Realtime Database, Cloud Storage và Cloud Firestore. Thêm các hàm vào ứng dụng của bạn là quy trình 3 bước:
- Chỉnh sửa tệp
user_privacy.json
của thư viện để phản ánh giản đồ Realtime Database, Cloud Firestore và Cloud Storage của ứng dụng. - Triển khai
clearData
vàexportData
dưới dạng Cloud Functions. - Triển khai điều kiện kích hoạt cho các hàm trong ứng dụng của bạn.
- Bảo mật dữ liệu
clearData
bằng các quy tắc lưu trữ.
Chỉnh sửa tệp user_privacy.json
của thư viện
Để bắt đầu, hãy sao chép hoặc tải kho lưu trữ GitHub về quyền riêng tư của người dùng Firebase xuống.
Khi bạn hoàn tất, hãy mở functions/user_privacy.json
trong một trình chỉnh sửa văn bản. Tệp json có một loạt các đường dẫn có thể tuỳ chỉnh mà các hàm clearData
và exportData
sử dụng để tìm dữ liệu của ứng dụng trong Realtime Database, Cloud Firestore và Cloud Storage. Nếu ứng dụng của bạn chỉ sử dụng một hoặc hai dịch vụ trong số đó, hãy bắt đầu bằng cách xoá các đối tượng JSON liên kết với các dịch vụ không dùng đến.
Khi các đối tượng biến mất, bạn có thể bắt đầu thay thế các dịch vụ còn lại các giá trị phần giữ chỗ với cấu trúc dữ liệu thực tế mà ứng dụng của bạn sử dụng.
Thêm đường dẫn Realtime Database vào dữ liệu người dùng
Để tuỳ chỉnh user_privacy.json
cho phiên bản Realtime Database của ứng dụng, hãy thay thế danh sách các chuỗi phần giữ chỗ trong "database"
bằng đường dẫn thực tế đến dữ liệu người dùng:
... "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 ] }, ...
Nếu chỉ muốn thêm một trong các hàm vào ứng dụng, bạn có thể xoá đối tượng của hàm còn lại thay vì điền dữ liệu vào đối tượng đó.
Thêm các đối tượng Cloud Firestore chứa dữ liệu người dùng
Để tuỳ chỉnh user_privacy.json
cho thực thể Cloud Firestore của ứng dụng, hãy thay thế danh sách đối tượng phần giữ chỗ trong "firestore"
bằng các đối tượng Cloud Firestore thực tế chứa dữ liệu người dùng:
... "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 ] }, ...
Nếu chỉ muốn thêm một trong các hàm vào ứng dụng, bạn có thể xoá đối tượng của hàm còn lại thay vì điền dữ liệu vào đối tượng đó.
Thêm bộ chứa Cloud Storage và tên tệp có dữ liệu người dùng
Để tuỳ chỉnh user_privacy.json
cho phiên bản Cloud Storage của ứng dụng, hãy thay thế bộ chứa lưu trữ của phần giữ chỗ và tên tệp trong "storage"
bằng các giá trị thực tế:
... "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"] ] }, ...
Nếu chỉ muốn thêm một trong các hàm vào ứng dụng, bạn có thể xoá đối tượng của hàm còn lại thay vì điền dữ liệu vào đối tượng đó.
Triển khai clearData
và exportData
dưới dạng Cloud Functions
Nếu bạn chưa quen với Cloud Functions, hãy đọc thêm về cách sử dụng chúng trong Hướng dẫn bắt đầu sử dụng Cloud Functions.
Khi bạn đã quen với Cloud Functions, hãy thêm các hàm clearData
và exportData
vào dự án:
- Sao chép
user_data.json
đã tuỳ chỉnh vào thư mụcfunctions
. - Sao chép mã từ
index.js
của thư viện quyền riêng tư của người dùng vàoindex.js
của dự án.- Nếu bạn không dùng
clearData
, hãy bỏ qua các hàmclearData
,clearDatabaseData
,clearFirestoreData
vàclearStorageData
. - Nếu bạn không dùng
exportData
, hãy bỏ qua các hàmexportData
,exportDatabaseData
,exportFirestoreData
vàexportStorageData
.
- Nếu bạn không dùng
- Triển khai các hàm.
Triển khai điều kiện kích hoạt cho clearData
và exportData
Mỗi hàm yêu cầu một điều kiện kích hoạt khác nhau:
clearData
: được kích hoạt khi người dùng xoá tài khoản của họ thông qua Authentication.exportData
: được kích hoạt bởi một yêu cầu HTTP.
Triển khai trình kích hoạt clearData
Để kích hoạt sự kiện clearData
, bạn cần dùng một phương thức trong Authentication. Nếu bạn
chưa thực hiện việc này, hãy thêm Authentication vào ứng dụng của bạn: nền tảng Apple, Android hoặc web.
Sau đó, hãy thêm cách để gọi phương thức delete
của SDK Authentication cho nền tảng của bạn:
iOS trở lên
FirebaseAuth.User.delete { error in
if let error = error {
print("Error deleting user: \(error)")
}
}
Android
FirebaseAuth.getCurrentUser().delete();
Web
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();
}
});
Triển khai trình kích hoạt exportData
Để triển khai một điều kiện kích hoạt exportData
, hãy thêm một nút hoặc đường liên kết vào ứng dụng để gọi
hàm thông qua yêu cầu HTTP. Đọc thêm về cách gọi hàm
qua HTTP trong phần Gọi hàm qua yêu cầu HTTP.
Thông tin chi tiết về yêu cầu:
- Loại:
POST
- URL:
https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
- Nội dung:
<var>CURRENT_USER'S_UID</var>
Gọi hàm trực tiếp trong Firebase Hosting
Nếu ứng dụng của bạn là ứng dụng web được lưu trữ trên Firebase Hosting, bạn có thể gọi
Hàm clearData
thông qua mục nhập rewrite
trong tệp firebase.json
của trang web:
"hosting": {
"rewrites": [
{"source": "/exportData", "function": "exportData"}
]
}
Bảo mật dữ liệu exportData
bằng các quy tắc lưu trữ
Để đảm bảo dữ liệu đã xuất ở chế độ riêng tư, hãy thêm Cloud Storage các quy tắc hạn chế quyền truy cập đối với người dùng đang xuất.
- Truy cập vào phần Bộ nhớ trong bảng điều khiển của Firebase.
- Mở thẻ Quy tắc.
- Dán quy tắc sau đây, rồi nhấp vào Xuất bản:
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... } }