Google Firebase Angular Firestore switchMap-Firebase错误DocumentReference.set()

问题描述 投票:0回答:1

我正在尝试设置Angular Firebase应用程序,我要与该应用程序共享的用户数据存储在Firestore数据库中。我收到以下错误:

错误错误:未捕获(承诺):FirebaseError:[code = invalid-argument]:调用函数DocumentReference.set()无效数据。不支持的字段值:未定义(在字段角色中找到)

我的数据设置如下:

enter image description here

我的用户服务设置如下: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)
  }

我已经缩小了导致错误的问题,该应用程序正在从构造函数中的this.user $返回null,但是我不确定为什么要这样做。我认为设置AngularFirestoreDocument会导致它访问该属性,但事实并非如此。您可以看到我的代码中散布了一些控制台日志功能。运行函数时返回“返回null”,

angular typescript firebase google-cloud-firestore angularfire
1个回答
0
投票

错误信息(重点为我:):

Function DocumentReference.set()用无效数据调用。 不支持的字段值:未定义(在字段角色中找到)

告诉您,您为role字段传递了未定义的值。这意味着您在user.role中有一个未定义的值。我们看不到为什么在这里,因此您必须通过找出user对象的来源来对其进行调试。

© www.soinside.com 2019 - 2024. All rights reserved.