Firestore Как добавить пользовательский документ в коллекцию при входе в FirebaseUI - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь загрузить новый документ как uid в коллекцию Firestore users, когда новый пользователь входит в систему.

Я использую FirebaseUI + VueJS и пытаюсь заполнить данные с помощью обратного вызова signInSuccessWithAuthResult. (Если есть лучший способ, пожалуйста, сообщите).

ОБНОВЛЕНИЕ: Я переделал код (ниже) и, по крайней мере, теперь в Firebase выдается ошибка:

Function CollectionReference.doc() requires its first argument to be 
of type non-empty string, but it was: undefined  Dismiss

Ниже приведена одна из возможных попыток без успеха. Буду весьма признателен за помощь с примерами кода.

firebase-config.js:

import firebase   from 'firebase';
import firebaseui from 'firebaseui'

import { usersCollection } from '@/services/registerFirebase'

export const FBuiConfig = {
    signInSuccessUrl: '/dashboard',
    signInFlow: 'popup',

    callbacks: {
        signInSuccessWithAuthResult: function(authResult, redirectUrl) {
            const userUid       = authResult.uid;
            const email         = authResult.email;
            const displayName   = authResult.displayName;
            const photoURL      = authResult.photoURL;
            const lastLoginAt   = authResult.lastLoginAt;
            const createdAt     = authResult.createdAt;
            setUser(userUid, email, displayName, photoURL, lastLoginAt, createdAt);
            return false;
        },

        uiShown: function() {
            document.getElementById('app-drawer').style.display = 'none';
            document.getElementById( 'app-toolbar').style.display = 'none';
        },
    },

    signInOptions: [
        firebase.auth.GoogleAuthProvider.PROVIDER_ID,
        {
            provider: firebase.auth.EmailAuthProvider.PROVIDER_ID,
            requireDisplayName: true,
            forceSameDevice: true,
        },

        firebaseui.auth.AnonymousAuthProvider.PROVIDER_ID,
    ],

    tosUrl: '/tos',
    privacyPolicyUrl: function() {
        window.location.assign('/pp');
    }
};

function setUser(userUid, email, displayName, photoURL, lastLoginAt, createdAt) {
    const user = {
        useruid         : userUid,
        useremail       : email,
        displayname : displayName,
        photourl        : photoURL,
        lastlogin       : lastLoginAt,
        created         : createdAt,
        calendarEvents: []
    }
    usersCollection.doc(userUid).set(user);
}

1 Ответ

0 голосов
/ 11 января 2019

authResult не пользователь, но пользователь.

const user = authResult.user;

И тогда вы, возможно, захотите убедиться, что вход в систему работает:

if (user) {
          const userUid       = user.uid;
          const email         = user.email;
          const displayName   = user.displayName;
          const photoURL      = user.photoURL;
          const lastLoginAt   = user.lastLoginAt;
          const createdAt     = user.createdAt;
}

return user != null;

В документе есть хороший пример, перейдите по этой ссылке 1011 *

...