我一直在寻找一种方法来使用Firebase的新Cloud Firestore进行身份验证。我知道这是可能的,但在文档和其他地方都没有好的指南。
有人可以解释一下在get()
来自Cloud Firestore的数据时如何提供身份验证UID吗?
以下是我的安全规则:
service cloud.firestore {
match /users/{userID} {
allow read, write: if request.auth.uid == userID;
}
}
这是我目前的代码:
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);
});
我的数据库结构只是root用户的“用户”集合,然后是每个用户的文档(以UID命名)。我想用用户的UID获取文档。
当然,由于安全规则,这会产生错误“缺少权限或权限不足”,这是预期的。
这个问题可能看起来很简单,但如果有人能找到一些关于此的好文档,那就太棒了!
答案 0 :(得分:6)
您的规则应在match /databases/{database}/documents
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userID} {
allow read, write: if request.auth.uid == userID;
}
}
}
答案 1 :(得分:2)
我只是对UID的工作方式感到困惑。我的印象是您必须为数据库操作提供一个UID和一个auth令牌。
您实际上并没有将UID传递给数据库操作。 firebase
对象存储身份验证状态。您只需登录(check the Firebase docs to read how to do this),然后在操作完成后(使用.then
promise语句)就可以进行操作。
另外,要使用户每次访问您的应用时都无需登录,可以have the `firebase object's authentication state persistent。