Как добавить документ в коллекцию в облачном firestore - PullRequest
0 голосов
/ 10 января 2019

У меня есть коллекция под названием «пользователи». Я пытаюсь добавить пользователя в коллекцию после аутентификации Google, но получаю следующую ошибку:

FirebaseError: [код = неверный аргумент]: недопустимая ссылка на документ. Ссылки на документы должны иметь четное количество сегментов, но у пользователей - 1.

Вот код

this.googlePlus.login({
    'scopes': '', 
    'webClientId': environment.googleWebClientId,
    'offline': true,
})
.then(user => {
    // save user data on the native storage
    const userRef: AngularFirestoreCollection<User> = this.afs.collection<User>(`users/`);
    const data: User = {
        email: user.email,
        displayName: user.displayName,
        uid: user.uid
    };
    userRef.set(data)
    .then(() => {
        this.router.navigate(['/home']);

Ответы [ 2 ]

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

Google + больше не поддерживается , поэтому вам стоит взглянуть на аутентификацию Firebase или новую облачную платформу идентификации GCP .

В случае Аутентификации Firebase вы должны слушать наблюдателя .onAuthStateChanged. Как только он запускает ваш user объект, вы берете его и записываете новый пользовательский документ в коллекцию пользователей в Firestore. Рекомендуется использовать uid из firebase.auth().currentUser.uid в качестве идентификатора документа пользователя в вашей коллекции users.

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

Ваш userRef относится к коллекции, а тип объекта называется CollectionReference. Вы пытаетесь вызвать set() для этого объекта, который должен стать новым документом в этой коллекции. Но это не так, как это работает. Вместо этого, похоже, что вы хотите позвонить add(), чтобы добавить новый документ с новым случайным идентификатором.

Если вы каким-то образом уже знаете идентификатор нового пользовательского документа, вы должны создать DocumentReference с этим идентификатором, а затем использовать set() в этой DocumentReference для создания документа.

...