firebase - Firestore 用户管理最佳实践?

标签 firebase vue.js firebase-authentication nuxt.js

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

使用 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 身份验证绑定(bind)在一起?

最佳答案

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

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

虽然还没有完成。

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

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

因此,答案分为 2 部分:年龄、最喜欢的颜色、购物车 ID 等用户个人资料数据存储在 firebase.auth 提供的 uid 下的 users 集合中()。最后,订阅该用户文档,以便在对其进行任何更改时,您的应用程序(脚本)会立即刷新所有数据(与按需获取相比)。

关于firebase - Firestore 用户管理最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54173320/

相关文章:

Swift 闭包不设置变量

ios - 从firebase删除 child 后如何更新ios TableView

swift - 使用 Firebase Auth 登录时如何访问 Firebase Firestore 数据?

reactjs - 如何在浏览器刷新后保持 React 组件状态

javascript - 如何调用.subscribe里面的方法?

datepicker - 如何在vueJs中使用动态样式

javascript - Laravel 5 : show comments using Vue.js

javascript - vue.js - 如何将对象数组拆分为多个 div 列

ios - 何时将用户注册数据保存到 Cloud Firestore

android - 创建签名的 APK 后,Firebase 电话身份验证不起作用