Firestore не записывает данные пользователя в базу данных - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь загрузить пользовательские данные в Firestore во время регистрации, используя FirebaseUI Web и Vue.js. Аккаунт создан на стороне Firebase. Однако база данных не заполняется - я не получаю никаких ошибок, но alert('Signed in as ' + displayName); показывает правильную информацию, и пользователь вошел в систему.

ОБНОВЛЕНИЕ: Я изменил код, создав функцию за пределами callbacks и отразив обработку ошибок - В вопросе нет изменений (без ошибок && без записи).

firbaseui-config.js:

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

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

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

    callbacks: {
        signInSuccessWithAuthResult: function(authResult) {
            addUser(authResult);
            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 addUser(authResult) {
    const user = authResult.user;
    const userUid = user.uid;
    const displayName = user.displayName; 
    const account = {
        useruid: userUid,
        calendarEvents: []
    }
    accountsCollection.doc(userUid).set(account)
    .then(function (docRef) {
        console.log('Document written with ID: ', docRef.id)
    })
    .catch(function (error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        alert.error(
            'Error adding document: ', errorCode + ': ' + errorMessage
        )
    })
    alert('Signed in as ' + displayName); // <-- WORKS!
}

1 Ответ

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

Большое спасибо @ RenaudTarnec. Данные возвращались null, и, к сожалению, поставщик Auth не возвращает никакой ошибки, когда это происходит.

Создавая журнал, используя необходимые возвращенные данные до , fb.usersCollection.doc(account.userUid).set(account) помог выяснить это.

Ниже приведен последний рабочий пример.

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

const fb = require('@/services/firebaseInit')

export var uiConfig = {
    signInSuccessUrl: '/dashboard',
    signInFlow: 'popup',

    callbacks: {
        signInSuccessWithAuthResult: function(authResult) {
            const newUser   = authResult.user
            const account = {
                avatar      : newUser.photoURL,
                eMail       : newUser.email,
                userName    : newUser.displayName,
                userUid     : newUser.uid,
                accountHolder: []
            }

            console.log(
                'New user: '+ account.userName  + '\n' +
                'with id: ' + account.userUid   + '\n' +
                'email: '   + account.eMail     + '\n' +
                'avatar: '  + account.avatar
            )

            fb.usersCollection.doc(account.userUid).set(account)
            .then(() => {
                console.log('New user account with ID:' + account.userUid + ' created');
            })
            .catch(err => {
                console.log(err)
                this.errorMsg = err.message
            })
            alert('Hello ' + account.userName + ', welcome to Firestore!');
            return false;
        }
    },

    signInOptions: [
        firebase.auth.GoogleAuthProvider.PROVIDER_ID,
        {
            provider: firebase.auth.EmailAuthProvider.PROVIDER_ID,
            requireDisplayName: true,
        },
        firebaseui.auth.AnonymousAuthProvider.PROVIDER_ID,
    ],

};
...