AngularFirestore缺少或权限不足(Firebase自定义令牌身份验证)



我一直在尝试从firestore读取数据,但无法读取…

async authUser() {
let token = this._tokman.getUserToken();
await this._afa.signInWithCustomToken(token);
}

从服务器获取令牌并将其传递给firebase以对用户进行身份验证。然后调用firestore获取数据。。

async data() {
await this._afa.onAuthStateChanged(user => {
if (user) {
this._afs.collection('gps-data').doc(user.uid)
.valueChanges()
.subscribe(res => {
console.log(res);
}, err => {
console.log(err);
})
}
})
}

但是从firestore得到这个错误。

FirebaseError: Missing or insufficient permissions.
at new e (http://localhost:4200/vendor.js:51950:23)
at http://localhost:4200/vendor.js:62177:28
at http://localhost:4200/vendor.js:62178:18
at e.onMessage (http://localhost:4200/vendor.js:62200:10)
at http://localhost:4200/vendor.js:62117:26
at http://localhost:4200/vendor.js:62148:37
at http://localhost:4200/vendor.js:66953:31
at ZoneDelegate.invoke (http://localhost:4200/polyfills.js:460:30)
at Zone.run (http://localhost:4200/polyfills.js:219:47)
at http://localhost:4200/polyfills.js:953:40

消防仓库的安全规则是

service cloud.firestore {
match /databases/{database}/documents {
match /gps-data/{userid} {
allow read: if request.auth.token.sub == userid;
}

}
}

还将jwt令牌添加到http头中。请指引我哪里做错了。

更新解决方法:更改firebase版本来自

"firebase": "^7.0 || ^8.0"

"firebase": "^8.0.2"

不更改安全规则

问题是此行中的token.sub

request.auth.token.sub == userid;

令牌的sub是为其铸造该令牌的项目ID。因此,您将项目ID和用户ID进行比较,但两者永远不会相同。

您想在这里比较两个用户ID,即:

request.auth.uid == userid;

我强烈建议您花一些时间阅读有关安全规则的文档,特别是关于保护身份验证和只允许内容所有者访问的部分。

最新更新