FirebaseError:无效的文档参考。文档引用必须具有偶数个段

时间:2020-07-13 14:36:37

标签: javascript firebase google-cloud-firestore

我正在尝试使用用户名和密码将用户登录到我的应用程序。我读到了Create Custom TokensAuthenticate with Firebase in JavaScript Using a Custom Authentication System,但是仍然对如何实现它感到困惑,因此我尝试了另一种方法。当用户插入其用户名时,如果存在这样的用户名,则应用将在Firestore集合中进行搜索,如果存在,请为该用户使用email字段并传递给方法signInWithEmailAndPassword(email, password);,我将收到上述错误因为我不尊重Cloud Firestore Data model结构应为collection - document - collection - document的地方。

在这种情况下我应该如何进行?

我的Firestore模式如下所示

users
 - username1
     - userId
     - email
 - username2
     - userId
     - email

JavaScript代码

app.post("/login", (req, res) => {
  const user = {
    username: req.body.username,
    password: req.body.password
  };
  ...

  let email;
  db.doc(`/users/${user.username}`).get()
  .then((doc) => {
    if (doc.exists) {
      email = db.doc(`/users/${user.username}/email`).get();
      firebase.auth().signInWithEmailAndPassword(email, user.password)
      .then((data) => {
        return data.user.getIdToken();
      }) 
      .then((token) => {
        return res.json({token});
      })
      ...

1 个答案:

答案 0 :(得分:2)

错误“文档引用必须具有偶数个段”与Firebase身份验证无关。告诉您构建文档引用的代码不正确:

db.doc(`/users/${user.username}/email`)

在这里,您的文档参考有三段(奇数)。文档引用必须具有偶数。

由于您已经阅读了用户文档,因此无需阅读其他内容。如果您希望从已经拥有的DocumentSnapshot中删除电子邮件地址,请直接获取它:

if (doc.exists) {
  email = doc.data().email;

我建议查看documentation,了解如何从Firestore中读取文档。