【发布时间】:2020-10-01 13:21:08
【问题描述】:
相同的源代码工作在一个单独的 html 页面中:
<script src="https://www.gstatic.com/firebasejs/7.19.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.19.0/firebase-firestore.js"></script>
<script>
var firebaseConfig = {
apiKey: "XYZ",
authDomain: "XYZ.firebaseapp.com",
databaseURL: "https://XYZ.firebaseio.com",
projectId: "XYZ",
storageBucket: "XYZ.appspot.com",
messagingSenderId: "XYZ",
appId: "XYZ"
};
// Initialize Firebase
let db =null;
if(!firebase.apps.length){
firebase.initializeApp(firebaseConfig);
db = firebase.firestore();
}
const id = new Date().getTime();
const userid = new Date().getTime();
let docRef = db.collection("alarms").doc("teste"+id);
docRef.set({ userid: userid }, { merge: true }).then((id)=>{
console.log("ID:",id);
}).catch(
(err)=>{
console.error(err);
}
);
以上,我从谷歌教程中获取的示例并且工作正常。但是,进入服务器端,使用依赖:
package.json
{
"name": "appengine-typescript",
"description": "An example TypeScript app running on Google App Engine.",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": ">=8.0.0"
},
"scripts": {
"start": "node -r source-map-support/register index.js"
},
"dependencies": {
"async_hooks": "^1.0.0",
"axios": "^0.19.2",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"ejs": "^2.6.2",
"express": "^4.16.3",
"firebase-admin": "8.6.0",
"firebase-functions": "3.3.0",
"jest-cli": "^26.4.2",
"js-sha1": "^0.6.0",
"node-cache": "^4.2.1",
"node-rest-client": "^3.1.0",
"nodemailer": "^6.3.0",
"source-map-support": "^0.5.16",
"uuid": "^3.3.2"
},
"devDependencies": {
},
}
来源:
import * as functions from "firebase-functions";
import * as firebase from "firebase-admin";
if (!firebase.apps.length) {
var firebaseConfig = {
apiKey: "XYZ",
authDomain: "XYZ.firebaseapp.com",
databaseURL: "https://XYZ.firebaseio.com",
projectId: "XYZ",
storageBucket: "XYZ.appspot.com",
messagingSenderId: "XYZ",
appId: "XYZ"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
}
const db = firebase.firestore();
const cmpID = "cmpid:" + new Date().getTime();
const userid = "userid" + new Date().getTime();
let docRef = db.collection("alarms").doc(cmpID);
docRef.set({ userid }, { merge: true }).then((id)=>{
console.log("ID:",id);
}).catch(
(err)=>{
console.error(err);
}
);
这种情况,出现如下错误:
{ Error: 7 PERMISSION_DENIED: Missing or insufficient permissions.
at Object.callErrorFromStatus (/mnt/c/Users/gandb/Documents/workspace/vriend/v-alarm/services/node_modules/@grpc/grpc-js/build/src/call.js:30:26)
at Http2CallStream.call.on (/mnt/c/Users/gandb/Documents/workspace/vriend/v-alarm/services/node_modules/@grpc/grpc-js/build/src/client.js:96:33)
at Http2CallStream.emit (events.js:203:15)
at process.nextTick (/mnt/c/Users/gandb/Documents/workspace/vriend/v-alarm/services/node_modules/@grpc/grpc-js/build/src/call-stream.js:100:22)
at process._tickCallback (internal/process/next_tick.js:61:11)
code: 7,
details: 'Missing or insufficient permissions.',
metadata: Metadata { internalRepr: Map {}, options: {} } }
我的 Firestore 配置是:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow create,read, write, update, delete: if true;
}
}
}
另外,我试过了:
- 将文件夹和子文件夹项目权限更改为 777
- 使用匿名选项卡和 html 页面示例继续工作。
【问题讨论】:
标签: javascript node.js google-cloud-firestore