Firebase Functions tương tác với Firestore

Newsletter May 9, 2022

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 Account firebase-adminsdk sang appspot

https://console.cloud.google.com/cloud-resource-manager?project=

Tags