Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore用户管理最佳实践?_Firebase_Vue.js_Firebase Authentication_Nuxt.js - Fatal编程技术网

Firebase Firestore用户管理最佳实践?

Firebase Firestore用户管理最佳实践?,firebase,vue.js,firebase-authentication,nuxt.js,Firebase,Vue.js,Firebase Authentication,Nuxt.js,因此,我正在使用Firestore和Nuxt开发一个web应用程序,当我的身份验证工作正常时,我想确保我遵循了最佳实践 使用Firebase身份验证只会给我一个标识符(本例中为电子邮件)和一个UID。然后,我创建了一个用户集合来存储其他数据,例如: { "UID": "6TIupYLKlcOE97b5Fe63uinf6Ik1", "app_metadata": { "role": "admin", "status": "approved" }, "firstNam

因此,我正在使用Firestore和Nuxt开发一个web应用程序,当我的身份验证工作正常时,我想确保我遵循了最佳实践

使用Firebase身份验证只会给我一个标识符(本例中为电子邮件)和一个UID。然后,我创建了一个用户集合来存储其他数据,例如:

{
  "UID": "6TIupYLKlcOE97b5Fe63uinf6Ik1",
  "app_metadata": {
    "role": "admin",
    "status": "approved"
  },
  "firstName": "Jon",
  "lastName": "Doe"
}
目前,我正在对用户进行身份验证以获取用户角色后执行以下操作:

// Getting user details
db.collection('users')
.where('UID', '==', user.uid)
.limit(1)
.get()
.then((snapshot) => {
  snapshot.forEach(doc => {
    console.log(doc.id, '=>', doc.data().app_metadata.role)
    dispatch('setROLE', doc.data().app_metadata.role)
  })
})
.catch((err) => {
  console.log('Error getting documents', err);
})

是否有更好的方法来处理存储额外的用户数据并将其与Firebase身份验证结合起来?

更传统的方法是使用UID作为文档的ID。这样,您只需说一下即可找到文档:

db.collection('users').doc(uid).get()   // either 0 or 1 document

这比必须执行查询和执行有限制的查询更容易。如果“用户”意外地为某个特定uid获取了两个文档,那么您现在所拥有的将会发生什么呢?

这个问题引出了另一个问题:处理应用程序状态(包括用户状态)的最佳实践。所以,这实际上是一个很好的问题,并且有一个最佳实践(非固执己见的答案)。下面是基于标准JavaScript的。我不熟悉vue或nuxt框架

关于存储用户配置文件数据,最佳做法是在数据存储中创建
users
集合,实际上是在Firestore(RTDB的下一代版本)中。使用
firebase.auth().currentUser.uid
作为每个用户记录(或Firestore行话中的文档)的文档id/名称。
firebase.auth().currentUser
对象通过
.onAuthStateChanged
观察者填充。例如,您可以说
firebase.firestore().collection('users').doc(firebase.auth().currentUser.uid).update({age:25})
来保存用户年龄

不过还没做完

您不希望每次需要读取用户配置文件数据时都必须查询数据存储。因此,您要做的是在登录时将实时侦听器(
.onSnapshot
)附加到用户文档。拥有一个名为
userDocument
的应用程序级别/全局变量,并执行
userDocument=userDoc
userDoc
是实时更新返回给您的对象

现在,您所要做的就是读取本地
userDocument
变量(立即,无获取延迟)。这种方法也是其他数据(如购物车(文档))的最佳实践


因此,答案分为两部分:年龄、喜爱的颜色、购物车id等用户配置文件数据存储在
users
集合中,该集合位于
firebase.auth()提供的uid下。然后,最后,订阅该用户文档,以便在对其进行任何更改时,您的应用程序(脚本)会立即刷新所有数据(而不是按需获取数据)。

您可以看看2021年的最佳做法是这样吗?如果是,你能提供一个代码示例吗?如果有帮助的话,我正在使用Nuxt/Vue。谢谢你有趣的观点!