Триггер аутентификации пользователя Firebase, который пишет в базу данных в реальном времени - PullRequest
0 голосов
/ 14 ноября 2018
exports.setupDefaultPullups = functions.auth.user()
    .onCreate(
        async (user) => {
            const dbRef= functions.database.ref;
            let vl= await (dbRef.once('value').then( (snapshot) => {
                return snapshot.ref.child('userInfo/'+user.uid).set(18);
            }));
            return vl;
        }
    );

Я пытаюсь написать триггер для некоторой начальной настройки для нового пользователя в Firebase. Однако приведенный выше код не работает. Что с этим не так? По сути, после регистрации нового пользователя я хотел бы установить его / ее свойство "defaultPullUps", скажем, 18, используя указанный выше путь.

РЕДАКТИРОВАТЬ: я извиняюсь за то, что не дал подробностей. Первоначально была проблема с ключевым словом "async", которая была исправлена ​​путем обновления движка node.js. Теперь я получаю различные сообщения об ошибках в зависимости от того, как я настраиваю код. Иногда говорится "... это не функция".

РЕДАКТИРОВАТЬ: хотя я согласен, что мой вопрос не на должном уровне, но в нем есть значение: в онлайн-документации триггеров аутентификации Firebase способ доступа к «основной» базе данных не показан https://firebase.google.com/docs/functions/auth-events

РЕДАКТИРОВАТЬ '': вот и все сообщение:

TypeError: Cannot read property 'child' of undefined
at exports.setupDefaultPullups.functions.auth.user.onCreate.user (/srv/index.js:15:36)
at cloudFunctionNewSignature (/srv/node_modules/firebase-functions/lib/cloud-functions.js:105:23)
at /worker/worker.js:756:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:228:7)

1 Ответ

0 голосов
/ 14 ноября 2018

Эта строка не имеет смысла:

const dbRef= functions.database.ref;

Если вы хотите использовать базу данных Firebase Realtime в облачной функции, которая запускается из другого источника (например, аутентификации Firebase в вашем случае), вы можете сделатьтак, используя Firebase Admin SDK.

Пример этого см. в разделе Initialize Firebase SDK для облачных функций в документации Начало работы с облачными функциями .В частности, вам нужно импортировать и инициализировать, используя:

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();

И затем вы можете получить доступ к базе данных из вашей функции, используя:

const dbRef= admin.database().ref();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...