使用云函数在firestore中创建文档

时间:2017-12-05 17:37:48

标签: firebase google-cloud-functions google-cloud-firestore

在我的应用程序中验证用户后,我想创建一个云函数,在我的firestore userProfile集合中为它们创建用户配置文件。

这是我的云函数的整个index.js文件

// 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(functions.config().firebase);

//function that triggers on user creation
//this function will create a user profile in firestore database
exports.createProfile = functions.auth.user().onCreate(event => {
    // Do something after a new user account is created
    return admin.firestore().ref(`/userProfile/${event.data.uid}`).set({
        email: event.data.email
    });
});

这是我收到的错误

TypeError: admin.firestore(...).ref is not a function
    at exports.createProfile.functions.auth.user.onCreate.event (/user_code/index.js:13:30)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59:27)
    at next (native)
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
    at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:53:36)
    at /var/tmp/worker/worker.js:695:26
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

在firestore云数据库中,我有一个名为userProfile的集合,其中应创建一个文档,其中包含在身份验证后为用户提供的唯一ID

2 个答案:

答案 0 :(得分:11)

admin.firestore()返回Firestore个对象的实例。从API文档中可以看出,Firestore类没有ref()方法。您可能会将其与实时数据库API混淆。

Firestore要求您在集合中组织文档。要访问文档,您可以这样做:

const doc = admin.firestore().doc(`/userProfile/${event.data.uid}`)

此处docDocumentReference。然后,您可以像这样设置该文档的内容:

doc.set({ email: event.data.email })

请务必阅读Firestore documentation以了解如何设置Firestore - 有许多地方与实时数据库不同。

答案 1 :(得分:3)

这是我的代码。当我创建新用户时,下面的功能将运行。

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


exports.createProfile = functions.auth.user().onCreate((user) => {

  var userObject = {
     displayName : user.displayName,
     email : user.email,
  };

  return admin.firestore().doc('users/'+user.uid).set(userObject);

});