我需要将 firebase 数据索引到 algolia ,firebase 中的读取和写入规则需要身份验证 (auth!=null)

I need to index firebase data to algolia , rules in firebase for both read and write requires Authentication (auth!=null)

我正在使用 algolia 文档中描述的代码。当 firebase 规则允许无需身份验证即可读取和写入时,它就可以工作。这不适用于需要身份验证的数据。我可以做些什么来在下面的代码中添加身份验证? 我尝试使用 firebase-admin,我认为只有当规则更改为允许读取单个 uid 时,此方法才有效。

const algoliasearch = require('algoliasearch');
const dotenv = require('dotenv');
const firebase = require('firebase');
const admin = require("firebase-admin");

var serviceAccount = require("./config/serviceAccountKey.json");

// load values from the .env file in this directory into process.env
dotenv.config();


admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: process.env.FIREBASE_DATABASE_URL
});

firebase.initializeApp({
    databaseURL: process.env.FIREBASE_DATABASE_URL
});

admin
  .auth()
  .createCustomToken('siddharth')
  .then((customToken) => {
    console.log(customToken);
    firebase.auth().authenticateWithCustomToken(customToken);
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

// admin.auth.createCustomToken('siddharth').then(token => {

// });


const database = firebase.database();
const algolia = algoliasearch(
    process.env.ALGOLIA_APP_ID,
    process.env.ALGOLIA_API_KEY
);
const index = algolia.initIndex(process.env.ALGOLIA_INDEX_NAME);

database.ref('/questions').once('value', questions => {
    const records = [];
    questions.forEach(question => {
        // get the key and data from the snapshot
        const childKey = question.key;
        const childData = question.val();
        // We set the Algolia objectID as the Firebase .key
        childData.objectID = childKey;
        // Add object for indexing
        records.push(childData);
    });

    console.log(records);
    // Add or update new objects
    index
        .saveObjects(records)
        .then(() => {
            console.log('questions imported into Algolia');
        })
        .catch(error => {
            console.error('Error when importing question into Algolia', error);
            process.exit(1);
        });
});


由于这似乎是一个 Node.js 脚本,它通过 Admin SDK 使用服务凭据来访问 Firebase 身份验证,因此您也可以使用该 Admin SDK 来访问数据库。使用服务凭据通过 Admin SDK 访问 Firebase 服务可提供完全的管理访问权限,并绕过您可能为数据库配置的任何安全规则。

在代码中,更改:

const database = firebase.database();

收件人:

const database = admin.database();