我正试图允许用户从Web应用程序读取和写入我的Firestore videoFeedback
集合,并收到“缺少权限或权限不足”错误。如何确保以正确的用户身份验证(或完全身份验证)发送对Firestore的请求?
这是使用Firestore和匿名Firebase身份验证的Angular应用程序。我已经设置了一个匿名用户。我想从Web应用程序而不是后端将文档添加到我的videoFeedback
集合中。我已经阅读了Firestore文档上的官方页面:
Authenticate Anonymously with Firebase
Get Started with Firebase Authentication on Websites
以及更多内容,以及阅读有关此主题的所有SO问题。
我的Firestore对象已经正确设置了(我知道,因为如果我的安全规则不需要非null request.auth,则可以读写数据库)。
非常感谢您的帮助。
private db: AngularFirestore;
public initFirebaseApp() {
firebase.initializeApp(this.firebaseConfig);
}
public anonymousAuth() {
firebase.auth().signInAnonymously().catch(function(error) {
console.log("ERROR: " + String(error.errorCode) +
" " + String(error.errorMessage))
});
console.log("User is authorized");
}
this.initFirebaseApp();
this.anonymousAuth();
let date_created = new Date().toLocaleString();
let feedback = {
"feedback": "FAKE_FEEDBACK",
"rating": -1,
'created': date_created,
};
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log(user.uid)
this.db.collection('videoFeedback').add(feedback);
}
}.bind(this));
我的安全规则如下所示
service cloud.firestore {
match /databases/{database}/documents {
match /videoFeedback/{feedback} {
allow read, write: if request.auth != null;
}
}
}
使用此配置,我得到以下输出:
User is authorized
JAZe9dsIMtdyNe2dhndleIcn9nd2
ERROR Error: Uncaught (in promise): FirebaseError: [code=permission-denied]: Missing or insufficient permissions.
FirebaseError: Missing or insufficient permissions.
at new FirestoreError (index.cjs.js:352)
at index.cjs.js:7274
at Y.<anonymous> (index.cjs.js:7219)
...
当我用
替换安全规则时service cloud.firestore {
match /databases/{database}/documents {
match /videoFeedback/{feedback} {
allow read, write;
}
}
}
我得到了相同的结果,减去了权限错误。这使我认为这是我的请求发送方式的问题,而不是我发送的数据或Firestore数据库的设置的问题。
User is authorized
JAZe9dsIMtdyNe2dhndleIcn9nd2 (or some random string)
要发送带有非null request.auth.uid的请求,我需要做什么?