Javascript Firestore管理员未在Electron应用程序上进行身份验证
我正在创建一个电子应用程序作为管理员的界面。目前正在使用实时数据库和firestore。我正在使用firebase admin sdk和一个本地.json服务帐户文件来连接实时数据库并执行所有不受限制的读/写操作。一切正常。但是,在尝试读取/写入Firestore数据库时,我收到一个错误: 您需要传递auth实例才能在浏览器中使用gRPC回退客户端。使用google auth库中的OAuth2Client 我确实在网上看到其他人也有类似的问题,我尝试了以下方法:Javascript Firestore管理员未在Electron应用程序上进行身份验证,javascript,firebase,google-cloud-firestore,electron-forge,Javascript,Firebase,Google Cloud Firestore,Electron Forge,我正在创建一个电子应用程序作为管理员的界面。目前正在使用实时数据库和firestore。我正在使用firebase admin sdk和一个本地.json服务帐户文件来连接实时数据库并执行所有不受限制的读/写操作。一切正常。但是,在尝试读取/写入Firestore数据库时,我收到一个错误: 您需要传递auth实例才能在浏览器中使用gRPC回退客户端。使用google auth库中的OAuth2Client 我确实在网上看到其他人也有类似的问题,我尝试了以下方法: npm重建 安装@grcp/g
- npm重建
- 安装@grcp/grcp包
- 安装GoogleAuth库
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是解决我问题的一个非常优雅的方法
Firestore是新的,因此与实时有一些不同 如果希望在electron、react或其他前端框架中实现,则需要使用 如果您希望使用Node.JS、c#等在安全服务器上实现Firestore,则需要使用 这就是我如何使用electron实现的。创建一个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实现服务帐户。您是否试图将此添加到前端electron应用程序或node.JS服务器这是一个前端electron应用程序,但它是为管理员提供的,因此需要管理员访问该应用程序数据库读取/写入/更新等。管理员SDK适用于实时数据库。嗨,达拉斯,据我所知,如果我使用客户端SDK,我将没有管理员权限?如果您授予该用户管理员访问权限,则是,他们可以有管理员访问权限。您需要为数据库配置安全规则并分配用户角色。当用户从客户端(electron app)进行身份验证时,google将验证他们从firebase的访问权限。你不必为此担心。只需确保设置了安全规则,以确保安全,并为应用程序用户分配角色。这会不会影响我设置实时管理员访问权限的方式?我是否也需要使用JSSDK并设置管理员权限?这是如果您想要对数据库进行管理员访问的话。如果您想要服务帐户或总管理员访问权限。这需要在服务器上实现,而不是在面向客户端的应用程序上实现。