CloudFunctions for Firebaseでローカルエミュレーターではfirestore へデータの登録ができるが、deployしてクラウドから実行すると下記のエラーが出ていた。
7 PERMISSION_DENIED: Missing or insufficient permissions
ここを参考にFirebase Admin SDKのserviceAccountKeyを設定する
https://firebase.google.com/docs/admin/setup?hl=ja
Firebaseコンソール → (左上の)設定 → サービスアカウント
から、
新しい秘密鍵の生成
xxx.json
を任意の場所へ配置する。
var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://[APPの名前].firebaseio.com"
});
これでdeploy後にクラウド側から関数実行をしてもエラーが出ず、正常にデータの登録ができた。
ちなみにこの時のfirestoreのルールはこれ。
※これはセキュリティがざるなので、あくまでも開発用に使用し、本番のプロダクトなどでは使わない方が良いです。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}