从 Firebase Ionic 读取用户时出错 Angular
Error while reading user from Firebase Ionic Angular
我在尝试读取和存储用户电子邮件时遇到错误。
addroom.page.ts:
构造函数:
constructor(private crudService: CrudService, private fbauth: AngularFireAuth) { }
方法:
async createRecord() {
const user = await this.fbauth.authState.pipe(first()).toPromise();
const record = {};
record['Name'] = this.roomName;
record['Number'] = this.roomNumber;
record['Description'] = this.roomDescription;
record['User'] = user;
this.crudService.create_NewRoom(record).then(resp => {
this.roomName = "";
this.roomNumber = undefined;
this.roomDescription = "";
this.roomUser = user.email;
console.log(resp);
})
.catch(error => {
console.log(error);
});
}
service.ts(CrudService):
import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
@Injectable({
providedIn: 'root'
})
export class CrudService {
constructor(
private firestore: AngularFirestore
) { }
create_NewRoom(record) {
return this.firestore.collection('Rooms').add(record);
}
read_Rooms() {
return this.firestore.collection('Rooms').snapshotChanges();
}
update_Room(recordID,record){
this.firestore.doc('Rooms/' + recordID).update(record);
}
delete_Room(recordID) {
this.firestore.doc('Rooms/' + recordID).delete();
}
}
进口:
import { Component, OnInit } from '@angular/core';
import { CrudService } from '../service/service';
import { AngularFireAuth } from '@angular/fire/auth';
import { first } from "rxjs/operators";
我得到一个错误:
ERROR 错误:未捕获(承诺):FirebaseError:[code=invalid-argument]:使用无效数据调用函数 DocumentReference.set()。不支持的字段值:自定义 Q 对象(在用户字段中找到)
如有任何帮助,我们将不胜感激!
如错误提示,您无法存储自定义对象,在本例中为 Firebase.User
。你需要提取你想要的属性,例如:
record['User'] = { email: user.email, displayName: user.displayName };
虽然我喜欢使用 table,我在其中存储与用户相关的所有数据,以便于访问并且无需提取特定数据。所以在这种情况下,我会在创建 "new room" 时只存储用户的 uid,并将用户数据放在单独的 table 中。这只是我的建议:)
我在尝试读取和存储用户电子邮件时遇到错误。
addroom.page.ts: 构造函数:
constructor(private crudService: CrudService, private fbauth: AngularFireAuth) { }
方法:
async createRecord() {
const user = await this.fbauth.authState.pipe(first()).toPromise();
const record = {};
record['Name'] = this.roomName;
record['Number'] = this.roomNumber;
record['Description'] = this.roomDescription;
record['User'] = user;
this.crudService.create_NewRoom(record).then(resp => {
this.roomName = "";
this.roomNumber = undefined;
this.roomDescription = "";
this.roomUser = user.email;
console.log(resp);
})
.catch(error => {
console.log(error);
});
}
service.ts(CrudService):
import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
@Injectable({
providedIn: 'root'
})
export class CrudService {
constructor(
private firestore: AngularFirestore
) { }
create_NewRoom(record) {
return this.firestore.collection('Rooms').add(record);
}
read_Rooms() {
return this.firestore.collection('Rooms').snapshotChanges();
}
update_Room(recordID,record){
this.firestore.doc('Rooms/' + recordID).update(record);
}
delete_Room(recordID) {
this.firestore.doc('Rooms/' + recordID).delete();
}
}
进口:
import { Component, OnInit } from '@angular/core';
import { CrudService } from '../service/service';
import { AngularFireAuth } from '@angular/fire/auth';
import { first } from "rxjs/operators";
我得到一个错误:
ERROR 错误:未捕获(承诺):FirebaseError:[code=invalid-argument]:使用无效数据调用函数 DocumentReference.set()。不支持的字段值:自定义 Q 对象(在用户字段中找到)
如有任何帮助,我们将不胜感激!
如错误提示,您无法存储自定义对象,在本例中为 Firebase.User
。你需要提取你想要的属性,例如:
record['User'] = { email: user.email, displayName: user.displayName };
虽然我喜欢使用 table,我在其中存储与用户相关的所有数据,以便于访问并且无需提取特定数据。所以在这种情况下,我会在创建 "new room" 时只存储用户的 uid,并将用户数据放在单独的 table 中。这只是我的建议:)