Я пытаюсь настроить приложение Angular Firebase, где пользовательские данные, которыми я хочу поделиться с приложением, хранятся в базе данных Firestore. Я получаю следующую ошибку:
ОШИБКА Ошибка: Uncaught (в обещании): FirebaseError: [код = неверный аргумент]: функция DocumentReference.set () вызвана с недопустимыми данными. Неподдерживаемое значение поля: не определено (найдено в роли поля)
Мои данные настроены следующим образом:
Мой пользователь служба настроена следующим образом: auth.service.ts
import { Injectable } from "@angular/core";
import { Router } from '@angular/router';
import { auth } from 'firebase/app';
import {
AngularFirestore,
AngularFirestoreDocument
} from '@angular/fire/firestore'
import { Observable, of } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { User } from './user.model';
import * as firebase from 'firebase';
import { AngularFireAuth } from '@angular/fire/auth';
import { faGameConsoleHandheld } from '@fortawesome/pro-light-svg-icons';
@Injectable({
providedIn: 'root'
})
export class AuthService {
user$: Observable<User>;
constructor(private afAuth: AngularFireAuth,
private afs: AngularFirestore,
private router: Router) {
//This is how we're getting into the firestoreDB
this.user$ = this.afAuth.authState.pipe(
switchMap(user => {
if (user){
console.log("user from constructor", user)
return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
} else {
console.log("returning null")
return of(null)
}
})
)
} //end constructor
private updateUserData(user){
//sets user data to firestore on login
const userRef: AngularFirestoreDocument<User> = this.afs.doc(`users/${user.uid}`)
console.log("userRef", userRef)
const data = {
uid: user.uid,
email: user.email,
displayName: user.displayName,
role: user.role,
thursdayCampaign: user.thursdayCampaign,
menagerieCoast: user.menagerieCoast
}
console.log("role:", user.thursdayCampaign)
return userRef.set(data, { merge: true})
}
async emailSignin(value){
const provider = new firebase.auth.EmailAuthProvider();
const credential = await this.afAuth.signInWithEmailAndPassword(value.email, value.password)
return this.updateUserData(credential.user)
}
user.model.ts:
export interface User {
uid: string;
email: string;
displayName?: string;
role: string;
thursdayCampaign: Boolean;
menagerieCoast: Boolean;
}
Я сузил проблему, которая создает ошибку, приложение возвращает null из this.user $ в конструкторе, но я не уверен, почему он это делает. Я думал, что установка AngularFirestoreDocument заставит его получить доступ к этому свойству, но это не так. Вы можете видеть, что некоторые функции журнала консоли разбросаны по всему коду. «Возвращаемый ноль» возвращается, когда я запускаю свою функцию,