Firebase Functions tương tác với Firestore
TL;DR
Cloud Functions khi deploy sẽ dùng Service Account default dạng
[email protected]
sẽ không thể tương tác với Firestore, Firebase Hosting, Firebase Storage,…Cần thêm các Rules tương ứng vào Service Account này:
Firebase Admin SDK Administrator Service Agent
Firebase Authentication Admin
Service Account Token Creator
Storage Admin
Hoặc đổi Service Account chạy function đó sang
[email protected]
.
Vấn đề gặp phải
Khi mình deploy Firebase Functions có tương tác đến Firestore khi run bị lỗi như bên dưới
Error: 7 PERMISSION_DENIED: Cloud Firestore API has not been used in project HIDDEN before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/firestore.googleapis.com/overview?project=HIDDEN then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
at Object.callErrorFromStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client.js:331:49)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:328:181)
at /workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:187:78
at processTicksAndRejections (node:internal/process/task_queues:78:11)
Đoạn code tương tác
let user = await firebaseAdmin.auth().getUser(uid);
Nguyên nhân
- Service Account chạy function này không có quyền tương tác tới Firestore.
Giải pháp
- Copy
roles
từ Service Accountfirebase-adminsdk
sangappspot
https://console.cloud.google.com/cloud-resource-manager?project=