如何从firestore获取当前用户数据?
Posted
技术标签:
【中文标题】如何从firestore获取当前用户数据?【英文标题】:How to get current user data from firestore? 【发布时间】:2020-02-21 14:45:36 【问题描述】:我正在开发一个 Ionic 4 项目,我想在用户登录应用程序后显示当前用户的所有帖子。目前,我正在使用snapshotChanges()
和subscribe()
方法(如下所示)从firestore 获取数据。但它为我提供了 firestore 文档中的每一个数据。在两个文档上都有userID
和postID
引用,我如何从该特定用户那里获得author
和desc
的值,或者有可能吗?
具体来说,如何显示user(6YbhQux2sgTH66F0cJpdcT87Pw83)
的帖子(54d039ec-5b3c-4ee9-95a0-418b06365f25)
包含author
和desc
?
Firestore:firestore image
这就是我所做的:
getData.service.ts
import Injectable from '@angular/core';
import AngularFirestore from '@angular/fire/firestore';
@Injectable(
providedIn: 'root'
)
export class getData
constructor(
private firestore: AngularFirestore
)
readData()
return this.firestore.collection('promotions').snapshotChanges();
post.ts
import AngularFirestore from '@angular/fire/firestore';
@Component(
selector: 'app-post',
templateUrl: './post.page.html',
styleUrls: ['./post.page.scss'],
)
export class PostPage implements OnInit
constructor(
private afs: AngularFirestore
)
ngOnInit()
this.getData.readData().subscribe(data =>
this.posts = data.map(e =>
return
id: e.payload.doc.id,
Author: e.payload.doc.data()['author'],
Description: e.payload.doc.data()['desc'],
;
)
console.log(this.posts);
);
post.html
<ion-card no-padding *ngFor="let post of posts">
<ion-card-header>
<ion-card-title>post.Author</ion-card-title>
</ion-card-header>
<ion-card-content>
<p> post.Description </p>
</ion-card-content>
</ion-card>
我也尝试使用afAuth.auth.currentUser
获取当前用户ID 和帖子,但它显示错误Property 'map' does not exist on type 'DocumentSnapshot'
。我是新手,不知道如何继续。
let user = this.afAuth.auth.currentUser;
uid = user.uid;
this.afs.firestore.collection('users').doc(uid).get()
.then(doc=>
var a = doc.data().posts
console.log(a);
this.afs.firestore.collection('posts').doc()
.get().then(doc2=>
this.promotions = doc2.map(e=>
return
id: e.payload.doc2.id,
Author: e.payload.doc2.data()['author'],
Description: e.payload.doc2.data()['desc'],
;
)
)
)
更新
let user = this.afAuth.auth.currentUser;
uid = user.uid;
const docs = this.afs.collection('users');
const userinfo = docs.snapshotChanges()
.pipe(
map(actions =>
actions.map(a =>
const data =
a.payload.doc.data();
const id = a.payload.doc.id;
const Author = a.payload.doc.data()['author']
return id, data, Author
;
)
)
);
console.log(userinfo);
输出:userInfo
【问题讨论】:
嗨@CODEr,根据屏幕截图,我不太确定您是否正确访问了数据。我认为您可能需要仔细检查指向您尝试访问的文档的参考。如果您从posts
集合中获取数据,最终目标是获取author
和desc
字段。您需要参考您的 postID
文档,以便您可以访问这些字段。另一方面,当访问users
集合并尝试访问包含0
字段的posts
映射时,您需要确定哪个userID
文档。您需要知道 documentID。
@sllopis 嗨,我想要得到的是用户(6YbhQux2sgTH66F0cJpdcT87Pw83)
生成的posts
集合字段author
和desc
。
【参考方案1】:
为了获取用户创建的帖子的“作者”和“描述”,您可以执行以下操作:
let user = this.afAuth.auth.currentUser;
uid = user.uid;
this.afs.firestore.collection('posts').where('user', '==', uid).get().then(posts =>
postsCreatedByUser = posts.docs.map(e =>
return
Author: e.data()['author'],
Description: e.data()['desc'],
;
))
)
请注意,为了过滤帖子,我使用 .where() 方法
【讨论】:
【参考方案2】:要获取author
和desc
,请尝试以下操作:
let user = this.afAuth.auth.currentUser;
uid = user.uid;
const docs = this.afs.collection('users');
const userInfo = docs.snapshotChanges().pipe(
map(data =>
return
id: data.payload.doc.id,
Author: data.payload.doc.data()['author']
Description: data.payload.doc.data()['desc']
;
));
你好像在用angularfire
,先把引用放在文件userid
,然后用snapshotChanges
,返回一个Observable
,就可以取回数据了。 Pipe
是 Observable
类中的一个实例方法,用于将功能运算符拼接成一个链(map
是这些运算符之一)。
【讨论】:
您好,我尝试了您的解决方案,但显示错误Property 'snapshotChanges' does not exist on type 'DocumentReference'
你的代码中afs
是什么,它的类型应该是AngulareFirestore
github.com/angular/angularfire/blob/master/docs/firestore/…
嗨,它是 AngularFirestore。我的代码import AngularFirestore from '@angular/fire/firestore'
和private afs: AngularFirestore
收到此错误Property 'payload' does not exist on type 'DocumentChangeAction<unknown>[]'
试试docs.snapshotChanges().pipe( map(actions => actions.map(a => const data = a.payload.doc.data(); const id = a.payload.doc.id; return id, ...data ; )) );
以上是关于如何从firestore获取当前用户数据?的主要内容,如果未能解决你的问题,请参考以下文章
实时获取当前登录用户的数据 - Flutter & Firestore
如何按文档 ID 从 Firebase Firestore 获取数据 - iOS?
当文档ID等于Flutter中当前记录的用户ID时获取firestore数据?