Проблема с initializeApp () в функциях Firebase - PullRequest
0 голосов
/ 25 сентября 2018

Я получаю предупреждения в журнале облачных функций Firebase.функции были развернуты должным образом и работали раньше.теперь я получаю ошибку.

@ firebase / database: FIREBASE ПРЕДУПРЕЖДЕНИЕ: предоставленные учетные данные аутентификации для приложения с именем «[ПО УМОЛЧАНИЮ]» недействительны.Обычно это означает, что ваше приложение не было правильно инициализировано.Убедитесь, что свойство «credential», предоставленное initializeApp (), авторизовано для доступа к указанному «databaseURL» и относится к правильному проекту.

Я потратил 5-6 часов на поиск решения, затем я попробовал одно решение, в котором я скачал файл serviceAccountKey.json и использую этот файл, но у меня возникла другая ошибка при развертывании функций.,и я пока не нашел решения.здесь ошибка

Error: Error occurred while parsing your function triggers.

ReferenceError: functions is not defined
    at Object.<anonymous> (D:\Parental Sheild\Coding\defenderFunctions\functions\index.js:22:25)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at C:\Users\H.A.R\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:18:11
    at Object.<anonymous> (C:\Users\H.A.R\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:38:3)

У меня есть обновление узла до 8.12.0 и обновление npm до последней версии.

здесь код инициализации приложения

const functions = require('firebase-functions');

const admin = require("firebase-admin");

const serviceAccount = require("./serviceAccountKey.json");

admin.initializeApp({
   credential: admin.credential.cert(serviceAccount),
   databaseURL: "https://database url"
});

вот мой код функции firebase

exports.sendMessage = functions.database.ref('/Defender/{UserId}/Child/{PinId}/Messages/{pushId}')
    .onWrite((change,context) => {
        const message = change.after.val();
        const sender = message.from;
        const receiver = message.to;
        const userID= message.uid;
        const promises = [];

        // if (senderUid == receiverUid) {
        //     //if sender is receiver, don't send notification
        //     promises.push(change.after.ref.remove());
        //     return Promise.all(promises);
        // }

        if (userID== receiver) {

                 const getInstanceIdPromise = admin.database().ref(`/Defender/${userID}/Profile/instanceId`).once('value');
                 const getSenderUidPromise = admin.database().ref(`/Defender/${userID}/Child/${sender}/Profile/name`).once('value');

            return Promise.all([getInstanceIdPromise, getSenderUidPromise]).then(results => {
            const instanceId = results[0].val();
            const sender = results[1].val();
            console.log('notifying ' + receiver + ' about ' + message.body + ' from ' + sender);

            const payload = {
                notification: {
                    title: sender,
                    body: message.body,
                    sound: "default"
                    // icon: sender.photoURL
                }
            };

            admin.messaging().sendToDevice(instanceId, payload)
                .then(function (response) {
                    console.log("Successfully sent message:", response);
                })
                .catch(function (error) {
                    console.log("Error sending message:", error);
                });
        });

        }else{

                 const getInstanceIdPromise = admin.database().ref(`/Defender/${userID}/Child/${receiver}/Profile/instanceId`).once('value');
                 const getSenderUidPromise = admin.database().ref(`/Defender/${userID}/Profile/displayName`).once('value');

            return Promise.all([getInstanceIdPromise, getSenderUidPromise]).then(results => {
            const instanceId = results[0].val();
            const sender = results[1].val();
            console.log('notifying ' + receiver + ' about ' + message.body + ' from ' + sender);

            const payload = {
                notification: {
                    title: sender,
                    body: message.body,
                    sound: "default"
                    // icon: sender.photoURL
                }
            };

            admin.messaging().sendToDevice(instanceId, payload)
                .then(function (response) {
                    console.log("Successfully sent message:", response);
                })
                .catch(function (error) {
                    console.log("Error sending message:", error);
                });
            });

        }

    });

Обновление: Я обнаружил проблему.Я читаю данные из базы данных внутри функции и получаю сообщение об ошибке, потому что у меня есть безопасные правила в моей базе данных Firebase.сейчас я не знаю, как решить эту проблему.любая помощь?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы используете functions, но вы, очевидно, никогда не определяли его в своем коде.Возможно, вы хотели указать firebase-functions вверху кода:

const functions = require('firebase-functions')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...