具有身份验证的Cloud Firestore

yum*_*sta 2 javascript authentication firebase firebase-authentication google-cloud-firestore

我一直在寻找一种方法来使用身份验证与Firebase的新Cloud Firestore.我知道这是可能的,但在文档和其他地方都没有好的指南.

有人可以解释一下如何在get()从Cloud Firestore获取数据时提供身份验证UID 吗?

这是我的安全规则:

service cloud.firestore {
  match /users/{userID} {
    allow read, write: if request.auth.uid == userID;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码:

var db = firebase.firestore();
var docRef = db.collection("users").doc(uid); //lets say "uid" var is already defined
docRef.get().then(function(doc) {
  if (doc.exists) {
      console.log("Document data:", doc.data());
  } else {
      console.log("No such document!");
  }
}).catch(function(error) {
  console.log("Error getting document:", error);
});
Run Code Online (Sandbox Code Playgroud)

我的数据库结构只是root用户的"用户"集合,然后是每个用户的文档(以UID命名).我想用用户的UID获取文档.

当然,由于安全规则,这会产生错误"缺少权限或权限不足",这是预期的.

这个问题可能看起来很简单,但是如果有人能找到一些好的文档,那就太好了!

yum*_*sta 9

我只是对 UID 的工作方式感到困惑。我的印象是您必须为数据库操作提供 UID 和身份验证令牌。

您实际上并未将 UID 传递给数据库操作。该firebase对象存储身份验证状态。您可以简单地登录(查看 Firebase 文档以了解如何执行此操作),并且在操作完成后(使用.thenpromise 语句)您可以简单地进行操作。

此外,为了让用户在每次访问您的应用程序时都不会登录,您可以让 `firebase 对象的身份验证状态保持不变


Har*_*esh 7

你的规则应该在里面 match /databases/{database}/documents

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userID} {
        allow read, write: if request.auth.uid == userID;
   }
  }
}
Run Code Online (Sandbox Code Playgroud)