我正在将Firebase实时数据库转换为Firebase Firestore数据库,但是无法找到合适的引用来查询当前用户。
onAuthUserListener = (next, fallback) =>
this.auth.onAuthStateChanged(authUser => {
if (authUser) {
this.user(authUser.uid)
.once('value')
.then(snapshot => {
const dbUser = snapshot.val();
// default empty roles
if (!dbUser.roles) {
dbUser.roles = [];
}
// merge auth and db user
authUser = {
uid: authUser.uid,
email: authUser.email,
emailVerified: authUser.emailVerified,
providerData: authUser.providerData,
...dbUser,
};
next(authUser);
});
} else {
fallback();
}
});
最具体地说,once('value')
和snapshot.val();
的替代品是什么?
我以为
.onSnapshot(snapshot => {
const dbUser = snapshot.val();
...
答案 0 :(得分:1)
在Firestore中,等效于once('value'
的称为get()
,等效于val()
的称为data()
。调用get()
会返回一个承诺,因此:
.get().then(snapshot => {
const dbUser = snapshot.data();
...
如果您有一个用户集合,则每个用户的个人资料都存储在以其UID作为ID的文档中,则可以使用以下命令加载该文件:
firebase.firestore().collection('users').doc(authUser.uid)
.get()
.then(snapshot => {
const dbUser = snapshot.val();
请注意,documentation on getting data对此进行了很好的介绍,因此,我建议在此花一些时间并可能会使用Cloud Firestore codelab。