如何使用Angular Ionic从Firebase实时数据库获取单个用户数据
问题解答
你的代码存在两处核心错误,导致无法拉取到用户数据:
- 异步时序问题:
afAuth.authState.subscribe是异步回调,你在回调外发起数据库请求时,用户UID还没有完成赋值,请求的路径为users/undefined,自然匹配不到对应节点 - 查询方法使用错误:单个用户节点是键值对结构,应该用
db.object()方法查询,你用的db.list()是用来查询列表类节点的,返回值为数组,无法直接通过键名取到name、prenom字段
修正后的完整代码如下:
import { Component } from '@angular/core'; import { AngularFireAuth } from '@angular/fire/compat/auth'; import { AngularFireDatabase } from '@angular/fire/compat/database'; // 请补全你项目中用到的其余依赖导入:ToastController、NavController、FirebaseAuthServiceService @Component({ // 补充你的组件元数据配置 selector: 'app-tab3', templateUrl: 'tab3.page.html', styleUrls: ['tab3.page.scss'] }) export class Tab3Page { name: string; prenom: string; constructor( private afAuth: AngularFireAuth, private db: AngularFireDatabase, private toast: ToastController, private navCtrl: NavController, private authService: FirebaseAuthServiceService ) { this.afAuth.authState.subscribe(user => { // 非空校验,避免未登录场景报错 if (!user?.uid) return; console.log('当前登录用户UID:', user.uid); // 用object方法查询单用户节点 this.db.object(`users/${user.uid}`).valueChanges().subscribe(userInfo => { if (!userInfo) return; this.name = userInfo['name']; this.prenom = userInfo['prenom']; console.log('拉取到的用户信息:', userInfo); }) }) } }
如果修改后仍然无法拉取数据,请检查你的Realtime Database安全规则,确认登录用户拥有对应users/{uid}节点的读权限。
内容的提问来源于stack exchange,提问作者Abdel Shmurda
相关产品推荐
相关产品推荐

