如何通过Firebase身份验证通过request.auth!= null发送Firestore请求?

时间:2019-07-12 03:28:18

标签: firebase google-cloud-firestore firebase-authentication

我正试图允许用户从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的请求,我需要做什么?

0 个答案:

没有答案