Получение ошибки аутентификации при инициализации Firestore Admin SDK на Node js

Я пытаюсь создать сервер с node js, который обрабатывает данные от клиента и загружает их в Firestore. Я еще новенький. Это код моего сервера:

const express = require('express');
const multer = require('multer');
const path = require('path');
const admin = require('firebase-admin');

let app = express();

let upload = multer();

let serviceAccount = require('./psylocke-774e2adbf0e5.json');

admin.initializeApp({
    credentials: admin.credential.cert(serviceAccount)
}); 

let db = admin.firestore();

let port = process.env.PORT || 8000;

app.route('/interface').get((_, res) => {
    try {
        res.sendFile(__dirname + '/interface.html');
    } catch (e) {
        res.status(404).send(e.message);
    }
})

app.post('/upload', upload.any(), (req, res) => {
    let test = {
        name:'juan',
        age:15
    };
    db.collection('roots').doc('sampleroot').set(test).then((mess) => {
        console.log("I went through hwere");
        res.send('it worked');
    }).catch((err) => {
        res.send('it didnt work');
        console.log(err);
    });
})

app.listen(port, () => console.log(`Server running on port ${port}`));

А это мой JSON-файл проекта (который мне пришлось скачать с облачных платформ Google):

{
  "type": "service_account",
  "project_id": "psylocke",
  "private_key_id": "<id>",
  "private_key": "<private key>",
  "client_email": "[email protected]",
  "client_id": "113260833969613996508",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-ja1c3%40psylocke.iam.gserviceaccount.com"
}

И я получаю следующую ошибку:

Error: Unable to detect a Project Id in the current environment.
To learn more about authentication and Google APIs, visit:
https://cloud.google.com/docs/authentication/getting-started

Странно, что я получаю эту ошибку, поскольку идентификатор проекта фактически указан в json-документе. Кто-нибудь знает, что происходит?


person JUAN FELIPE SUÁREZ BURGOS    schedule 24.05.2020    source источник


Ответы (1)


Это потому, что Firestore. При инициализацииApp есть возможность передать идентификатор проекта, который вам нужно сделать. Интеграция Firestore с IAM недостаточно хороша (пока) для извлечения из учетной записи службы, особенно потому, что учетные записи служб могут (и часто это делают) указывать на другие проекты, поэтому вы, возможно, не захотите, чтобы это обязательно.

Проверьте эту документацию: https://firebase.google.com/docs/reference/js/firebase для параметров, которые можно передать этому вызову инициализации. Например.:

// Initialize default app
// Retrieve your own options values by adding a web app on
// https://console.firebase.google.com
firebase.initializeApp({
  apiKey: "AIza....",                             // Auth / General Use
  applicationId: "1:27992087142:web:ce....",      // General Use
  projectId: "my-firebase-project",               // General Use
  authDomain: "YOUR_APP.firebaseapp.com",         // Auth with popup/redirect
  databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database
  storageBucket: "YOUR_APP.appspot.com",          // Storage
  messagingSenderId: "123456789"                  // Cloud Messaging
});
person Gabe Weiss    schedule 24.05.2020