web-dev-qa-db-ja.com

クラウド関数を使用して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)

ファイアストアクラウドデータベースには、認証後にユーザーに与えられる一意のIDでドキュメントを作成する必要があるuserProfileというコレクションがあります

9
Reshaud Ally

admin.firestore()Firestore オブジェクトのインスタンスを返します。 APIドキュメントからわかるように、Firestoreクラスにはref()メソッドがありません。 Realtime Database APIと混同している可能性があります。

Firestoreでは、コレクション内でドキュメントを整理する必要があります。ドキュメントに到達するには、次のようにします。

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

ここで、docDocumentReference です。次に、そのドキュメントのコンテンツを次のように設定できます。

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

Firestoreの設定方法を理解するには、必ずFirestore documentation をお読みください。RealtimeDatabaseとは異なるところがたくさんあります。

13
Doug Stevenson

これが私のコードです。新しいユーザーを作成すると、以下の関数が実行されます。

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);

});
4
VK321