首页 > 解决方案 > 如何将用户的 displayName 添加到 Firestore 数据库集合条目?

问题描述

我正在使用 Firebase 身份验证和 Firestore 数据库设置一个简单的网页,该数据库从表单中获取用户输入,将输入添加为 Firestore 中的集合文档,然后还输出整个集合。集合中的每个文档都有两个字段,文档的名称和正文。目标是允许用户使用输入表单在网站上发帖。我描述的一切都在工作,但现在我想user.displayName在帖子中显示,以显示究竟是谁创建了用户输入,这就是我不知道该怎么做。这是来自script.js网站的相关代码:

const createForm = document.querySelector('#create-form');
createForm.addEventListener('submit', (e) => {
  e.preventDefault();

  db.collection('forumposts').add({
    Body: createForm['body'].value,
    //the line below is what I cannot figure out how to set up
    Name: string(user.displayName) 
  }).then(() => {
    //reset the form
    createForm.reset();
  }).catch(err => {
    console.log(err.message)
  })
});

我还在学习 JavaScript,所以如果我遗漏了一些明显的东西,我深表歉意。我知道正在正确收集用户的 displayName(在注册时收集),因为我可以将其记录到控制台并正确显示。我只是不知道如何将其添加为此数据库集合输入中的字段。我曾尝试在 SO 上搜索相关问题,但只收到与用户如何在注册时添加显示名称相关的问题。我已经有了显示名称,我只需要将它输入到数据库中。任何帮助将不胜感激!

标签: javascriptfirebasegoogle-cloud-firestorefirebase-authenticationfirebaseui

解决方案


定义在哪里"user"?如果没有用户登录,这可能为空,因此最好检查用户。

const createForm = document.querySelector('#create-form');
createForm.addEventListener('submit', (e) => {
  e.preventDefault();

  const user = firebase.auth().currentUser

  if (user) {
    db.collection('forumposts').add({
      Body: createForm['body'].value,
      Name: user.displayName || "No username"
    }).then(() => {
      //reset the form
      createForm.reset();
    }).catch(err => {
      console.log(err.message)
    })
  } else {
    console.log("NO user logged in")
  }
});

您不需要String()构造函数。如果displayName已定义,它将是一个字符串。您可以if (user.displayName)在添加帖子之前使用来检查用户是否有显示名称。


推荐阅读