Firebase: запуск события в Firestore для нового пользователя, созданного в FirebaseAuth - PullRequest
0 голосов
/ 19 мая 2019

Я написал очень простую облачную функцию для добавления некоторых полей в Firestore с некоторой информацией из недавно созданного FirebaseUser в FirebaseAuth.

В Firestore у меня есть коллекция с именем «рекорд».Каждый раз, когда создается новый пользователь, я хочу добавить документ с идентификатором пользователя firebaseusers в качестве документа и двумя полями, такими как:

рекорд / uid / Score & рекорд / uid / usernick (например, highscore / fgt38gudg9 /430 & highscore / fgt38gudg9 / cooldude45)

Это моя функция:

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

const admin = require('firebase-admin');
admin.initializeApp();

const db = admin.database()

//On user creation, trigger: Add information to /highscore/uid
exports.onUserCreation = functions.auth.user().onCreate((user) => {

    const collection = db.collection("highscore")
    const userid = user.uid
    const usernick = user.displayName
    collection.doc(userid).set({
        score: 0
        user: usernick
    })

})

Однако, когда функция срабатывает, я сталкиваюсь с этой ошибкой:

TypeError: db.collection is not a function
    at exports.onUserCreation.functions.auth.user.onCreate (/srv/index.js:11:24)
    at cloudFunctionNewSignature (/srv/node_modules/firebase-functions/lib/cloud-functions.js:120:23)
    at /worker/worker.js:825:24
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

Я не могу понять это.Есть предложения?

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

admin.database() дает вам ссылку на экземпляр базы данных реального времени для вашего проекта. Вместо этого вы хотите использовать admin.firestore().

Кроме того, вы захотите вернуть обещание, полученное от set(), в противном случае операция может не завершиться до завершения функции.

return collection.doc(userid).set({
    score: 0
    user: usernick
})

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

2 голосов
/ 19 мая 2019

Я думаю, что вы используете Firstore:

const db = admin.firestore()
...