【问题标题】:firebase cloud function listing users doesn't return uid of user列出用户的firebase云功能不返回用户的uid
【发布时间】:2019-11-14 21:46:10
【问题描述】:

我已经实现了一个函数来列出所有具有“用户”角色的用户。该函数返回所有用户,但是,我希望将 uid 附加到用户以用于客户端上的静态路由。

exports.listUsers = functions.https.onRequest(async (request, response) => {
  response.set('Access-Control-Allow-Origin', '*');
  const snapshot = await admin.firestore().collection('users').where('role', '==', 'users').get();
  const users = snapshot.docs.map(doc => doc.data());
  response.send(JSON.stringify(users));
});

如何将 uid 附加到用户对象?

【问题讨论】:

  • 您将 UID 存储在数据库中的什么位置?你的文件是什么样的?
  • 您是否 100% 肯定您将 uuid 保存在用户的文档中?默认情况下不会发生
  • 请注意,这个问题似乎并非特定于 Cloud Functions,而是与使用 Node.js 中的 Firestore 有关。答案取决于您的数据结构,因此请添加您从此查询返回的文档的屏幕截图,突出显示您希望 UID 来自何处。
  • 如果 UID 没有存储在数据库中的任何地方,那么我认为您将很难显示该信息。您是否使用文档 ID 来存储 UID?
  • Firebase Auth 中的数据不会以任何方式自动链接到 Firestore 中的数据,除非通过您编写的代码。如果您想在 Firestore 中存储每个用户的数据,您必须自己创建这些文档。

标签: node.js firebase google-cloud-firestore google-cloud-functions firebase-admin


【解决方案1】:

我有根据的猜测是您使用 UID 作为文档 ID。由于文档 ID 不是 document.data() 的一部分,因此不会与您当前的代码一起返回。

解决方法是显式添加 ID:

const users = snapshot.docs.map(doc => { id: doc.id, data: doc.data() });

如果您的文档没有 id 字段,您还可以将 ID 与字段合并,如下所示:

const users = snapshot.docs.map(doc => { id: doc.id, ...doc.data() });

【讨论】:

  • 你是说 doc.id 吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-10
  • 2022-01-23
  • 2018-09-02
  • 2020-09-08
  • 2023-03-11
  • 2022-01-21
  • 2021-06-20
  • 2019-04-05
相关资源
最近更新 更多