Firestore 管理员未在电子应用程序上进行身份验证
Firestore Admin Not Authenticating on Electron App
我正在创建一个电子应用程序作为管理员的界面。当前使用实时数据库和 firestore。我正在使用带有本地 .json 服务帐户文件的 firebase admin sdk 连接到实时数据库并执行所有不受限制的 read/write 操作。一切都按预期工作。但是,当尝试 read/write 到 Firestore 数据库时,我收到一个错误:
You need to pass auth instance to use gRPC-fallback client in browser. Use OAuth2Client from google-auth-library.
我在网上看到其他人也有类似的问题,我尝试了以下方法:
- npm 重建
- 安装@grcp/grcp 软件包
- 安装 google-auth-library
不幸的是,我仍然得到同样的回复。我也收到了很多如下的警告信息(每个都引用了不同的js文件),不确定它们是否相关:
DevTools failed to load SourceMap: Could not parse content for file:///Users/anaroca/Desktop/FCF-Admin/node_modules/@google-cloud/firestore/build/src/pool.js.map: Unexpected end of JSON input
这是我启动管理应用程序的方式:
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'
});
感谢任何帮助。
编辑:从达拉斯得到答案后,我发现这个 Whosebug 是解决我的问题的一个非常优雅的方法。
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 实施服务帐户。
我正在创建一个电子应用程序作为管理员的界面。当前使用实时数据库和 firestore。我正在使用带有本地 .json 服务帐户文件的 firebase admin sdk 连接到实时数据库并执行所有不受限制的 read/write 操作。一切都按预期工作。但是,当尝试 read/write 到 Firestore 数据库时,我收到一个错误:
You need to pass auth instance to use gRPC-fallback client in browser. Use OAuth2Client from google-auth-library.
我在网上看到其他人也有类似的问题,我尝试了以下方法:
- npm 重建
- 安装@grcp/grcp 软件包
- 安装 google-auth-library
不幸的是,我仍然得到同样的回复。我也收到了很多如下的警告信息(每个都引用了不同的js文件),不确定它们是否相关:
DevTools failed to load SourceMap: Could not parse content for file:///Users/anaroca/Desktop/FCF-Admin/node_modules/@google-cloud/firestore/build/src/pool.js.map: Unexpected end of JSON input
这是我启动管理应用程序的方式:
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'
});
感谢任何帮助。
编辑:从达拉斯得到答案后,我发现这个 Whosebug 是解决我的问题的一个非常优雅的方法。
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 实施服务帐户。