【问题标题】:Why isn't a new collection being created in Cloud Firebase?为什么没有在 Cloud Firebase 中创建新集合?
【发布时间】:2021-01-10 18:03:55
【问题描述】:

我已返回一个承诺“db”以访问该集合。该集合尚不存在,因为当我允许用户注册时,Firebase 应该会自动创建该集合。然后我通过传入一个 id 创建了一个文档,因此当我保存到该文档时,它将为该文档创建一个 autoid。

然后我设置了一个名为 email 的属性,然后将 email 值传递给它。现在文档将具有与用户相同的 id。

问题是它没有创建一个新集合,有什么想法吗?

   function signup(){

  var userEmail = document.getElementById("email_field").value;
  var userPass = document.getElementById("password_field").value;

  firebase.auth().createUserWithEmailAndPassword(userEmail, userPass)(cred => {
    return db.collection('users').doc(cred.user.uid).set({
      email: document.getElementById("email_field").value
    }).then
  })
  .catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    window.alert("Error : " + errorMessage);
    // ...
  });
}

这是我在 Cloud Firebase 规则中设置并允许创建文档的内容:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
}
}

【问题讨论】:

  • 您的代码显然没有做任何有错误的事情。你有什么代码来检查和报告错误?我们只能看到两个变量的赋值。另外,你有一个悬空的then,它什么都不做——你需要吗?
  • 嗨,道格,感谢您的评论。我删除了悬空的“then”并添加了一种检查错误的方法。我已经用这些更改更新了上面的代码。

标签: javascript database firebase google-cloud-firestore


【解决方案1】:

如果您在调用 set 方法时看不到任何错误,我建议您使用 firebase authenticatio triggers(在当前实现中保持一些逻辑分离而不是很多承诺)这样你可以通过触发器给出的参数来引用用户信息

PS:你在 db 调用时需要那个“then”吗? (正如道格在他的评论中提到的)

【讨论】:

  • 你说得对,我已经从 db 调用中删除了“then”。感谢您的帮助,我将检查 firebase 身份验证触发器。
猜你喜欢
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2021-01-12
  • 2020-08-08
  • 2019-03-28
  • 1970-01-01
  • 2021-05-06
相关资源
最近更新 更多