首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复用户管理最佳实践?

修复用户管理最佳实践?
EN

Stack Overflow用户
提问于 2019-01-13 21:19:41
回答 2查看 2.6K关注 0票数 3

因此,我正在使用Firestore和Nuxt开发一个web应用程序,在进行身份验证的同时,我想确保我遵循的是最佳实践。

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

代码语言:javascript
复制
{
  "UID": "6TIupYLKlcOE97b5Fe63uinf6Ik1",
  "app_metadata": {
    "role": "admin",
    "status": "approved"
  },
  "firstName": "Jon",
  "lastName": "Doe"
}

目前,在对用户进行身份验证以获得用户的角色之后,我正在执行以下操作:

代码语言:javascript
复制
// 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身份验证联系在一起?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-14 03:37:06

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

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

不过还没做完。

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

现在,您要做的就是读取本地userDocument变量(立即,没有获取延迟)。这种方法也适用于其他数据,如购物车(文档)。

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

票数 8
EN

Stack Overflow用户

发布于 2019-01-13 21:31:37

一种更传统的方法是使用UID作为文档的ID。这使您可以简单地通过以下方式找到文档:

代码语言:javascript
复制
db.collection('users').doc(uid).get()   // either 0 or 1 document

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54173320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档