Cloud Firestore và Cơ sở dữ liệu thời gian thực đều dựa trên các ngôn ngữ quy tắc ngắn gọn, mạnh mẽ được tạo riêng để quản lý bảo mật thông tin và kiểm soát truy cập. Tuy nhiên, khi các quy tắc trở nên dài hơn và phức tạp hơn, bạn có thể cần một số trợ giúp để gỡ lỗi trong hành vi của chúng.
Trình mô phỏng Firebase bao gồm khả năng tạo báo cáo phạm vi quy tắc, vì vậy bạn có thể thấy chính xác mỗi biểu thức con được đánh giá khi bạn tạo lại lỗi. Các báo cáo cũng cung cấp thông tin về tần suất mỗi trường hợp thử nghiệm sử dụng một quy tắc, giống như các kỹ thuật "phủ sóng dòng" truyền thống.
Tạo báo cáo
Sau khi chạy một bộ kiểm tra, bạn có thể truy cập báo cáo phạm vi kiểm tra cho biết cách đánh giá từng quy tắc bảo mật của bạn.
Để nhận báo cáo, hãy truy vấn điểm cuối được hiển thị trên trình giả lập trong khi trình giả lập đang chạy. Đối với phiên bản thân thiện với trình duyệt, hãy sử dụng URL sau:
Cửa hàng lửa trên đám mây
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Cơ sở dữ liệu thời gian thực
http://localhost:9000/.inspect/coverage?ns=<database_name>
Điều này chia các quy tắc của bạn thành các biểu thức và biểu thức con mà bạn có thể di chuột qua để biết thêm thông tin, bao gồm số lượng đánh giá và giá trị được trả về. Đối với phiên bản JSON thô của dữ liệu này, hãy bao gồm URL sau trong truy vấn của bạn:
Cửa hàng lửa trên đám mây
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Cơ sở dữ liệu thời gian thực
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Gỡ lỗi các quy tắc ví dụ
Để dễ dàng tạo báo cáo thử nghiệm, hãy sử dụng khởi động nhanh trình giả lập có sẵn trên GitHub cho Cloud Firestore và Cơ sở dữ liệu thời gian thực . Những bước khởi động nhanh này hướng dẫn bạn cách cài đặt và khởi tạo trình mô phỏng đúng cách, sau đó tạo các thử nghiệm mẫu từ một bộ quy tắc mẫu.
Hãy xem xét một ứng dụng ví dụ sử dụng Cloud Firestore để đếm số lần người dùng nhấp vào một nút. Ứng dụng sử dụng các quy tắc sau:
Cửa hàng lửa trên đám mây
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow write: if request.resource.data.value == resource.data.value +1; } } }
Để gỡ lỗi trong các quy tắc hiển thị ở trên, hãy sử dụng thử nghiệm JavaScript mẫu sau:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
Trình giả lập tạo một báo cáo có sẵn tại URL đã lưu ý ở trên:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Báo cáo hiển thị các lỗi không xác định và giá trị null sau:
Vấn đề với ví dụ cụ thể này là các quy tắc không phân biệt giữa tạo tài liệu và cập nhật tài liệu. Do đó, việc ghi không được phép nếu tài liệu không tồn tại và không thể tạo tài liệu vì nó không tồn tại. Việc phân biệt thao tác "ghi" thành hai thao tác cụ thể hơn — "tạo" và "cập nhật" — sẽ giải quyết được vấn đề.
Cửa hàng lửa trên đám mây
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow create: if request.resource.data.value == 0; allow update: if request.resource.data.value == resource.data.value +1; } } }
Báo cáo được tạo cho biết tần suất từng quy tắc được sử dụng và quy tắc nào được trả lại.