Xoá và xuất dữ liệu người dùng cuối

Để 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 clearDataexportData 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 StorageCloud Firestore. Thêm các hàm vào ứng dụng của bạn là quy trình 3 bước:

  1. Chỉnh sửa tệp user_privacy.json của thư viện để phản ánh giản đồ Realtime Database, Cloud FirestoreCloud Storage của ứng dụng.
  2. Triển khai clearDataexportData dưới dạng Cloud Functions.
  3. Triển khai điều kiện kích hoạt cho các hàm trong ứng dụng của bạn.
  4. 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 clearDataexportData sử dụng để tìm dữ liệu của ứng dụng trong Realtime Database, Cloud FirestoreCloud 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 clearDataexportData 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 clearDataexportData vào dự án:

  1. Sao chép user_data.json đã tuỳ chỉnh vào thư mục functions.
  2. Sao chép mã từ index.js của thư viện quyền riêng tư của người dùng vào index.js của dự án.
    • Nếu bạn không dùng clearData, hãy bỏ qua các hàm clearData, clearDatabaseData, clearFirestoreDataclearStorageData.
    • Nếu bạn không dùng exportData, hãy bỏ qua các hàm exportData, exportDatabaseData, exportFirestoreDataexportStorageData.
  3. Triển khai các hàm.

Triển khai điều kiện kích hoạt cho clearDataexportData

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.

  1. Truy cập vào phần Bộ nhớ trong bảng điều khiển của Firebase.
  2. Mở thẻ Quy tắc.
  3. 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...
  }
}