我正在创建一个电子应用程序作为管理员界面。目前使用实时数据库和firestore。我正在使用带有本地 .json 服务帐户文件的 firebase admin sdk 连接到实时数据库并执行所有不受限制的读/写操作。一切都按预期工作。但是,在尝试读取/写入 Firestore 数据库时,我收到一个错误:
<块引用>您需要传递 auth 实例才能在浏览器中使用 gRPC-fallback 客户端。使用 google-auth-library 中的 OAuth2Client。
我确实在网上看到其他人也有类似的问题,我尝试了以下方法:
不幸的是,我仍然得到相同的答复。我还收到了很多以下警告消息(每个都引用了不同的 js 文件),不确定它们是否相关:
<块引用>DevTools 无法加载 SourceMap:无法解析 file:///Users/anaroca/Desktop/FCF-Admin/node_modules/@google-cloud/firestore/build/src/pool.js.map 的内容:意外结束JSON 输入
这是我启动管理应用程序的方式:
var admin = require("firebase-admin");
var serviceAccount = require("./secret.json");
app = admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://project-name.firebaseio.com",
projectId: 'project-name'
});
感谢任何帮助。
编辑:从达拉斯得到答案后,我发现这个 stackoverflow 是我问题的一个非常优雅的解决方案。
答案 0 :(得分:0)
Firestore 是新的,因此与实时存在一些差异。
如果您希望在 Electron、React 或其他前端框架中实现,您需要使用 JavaScript SDK。
如果您希望使用 Node.JS、c# 等在安全服务器上实现 Firestore,您需要使用 Admin SDK.
这就是我使用电子实现的方式。创建一个 firebase.js 文件。如果您想使用最新的语法,请使用 babel 进行转译。
import firebase from 'firebase/app';
import 'firebase/firestore';
const firebaseConfig = {
apiKey: 'key',
authDomain: 'domain.firebaseapp.com',
databaseURL: 'https://domain.firebaseio.com',
projectId: 'project1234',
storageBucket: 'myapp.appspot.com',
messagingSenderId: '123456789',
appId: 'ID',
measurementId: 'MID',
};
firebase.initializeApp(firebaseConfig);
export const firestore = firebase.firestore();
export default firebase;
然后在您需要访问数据库的任何地方执行此操作
// The firebase.js file you created earlier.
import { firestore } from './firebase';
const getPost = async (poss) => {
const snapshot = await firestore.collection('location/of/post').get();
const myPosts = snapshot.docs.map(collectIdsAndDocs);
return myPosts;
};
const createPost = async (post) => {
const docRef = await firestore.collection('location/of/post').add(post);
const doc = await docRef.get();
return doc;
};
createPost({ Title: 'My First Post', Content: 'My content' });
getPost();
要保护数据库并授予管理员权限,请转到项目设置并分配用户角色。如果您拥有清理旧数据或用户或用于其他自主用途的服务器,您应该只需要使用 Admin-SDK 实施服务帐户。