node.js - 如何在 Firestore 中显式发送 request.auth.uid?
问题描述
在 Firestore 中创建文档之前,我使用 Node.js 后端进行一些验证。话虽如此,如果所有检查都通过,我firebase-admin
会代表某些用户创建文档。
在 Firestore 中,我设置了一些安全规则,例如:
...
match /some_collection {
allow read: if true;
allow write: if request.auth.uid == 'some_specific_uid';
}
...
通常,当用户在前端登录时request.auth.uid
填充,这不是我的情况。Firebase.auth()
事实上,这就是我使用的:
const firebase_admin = require('firebase-admin');
/**
* SOME BUSINESS VALIDATIONS HERE
*/
// ...
// IF ALL VALIDATIONS PASS
// Do some stuff in firebase
firebase_admin.initializeApp(process.env.CREDENTIALS);
let db = firebase_admin.firestore();
// HOW TO SEND uid along with this:
db.collection('some_collection').doc('my_doc').update({'key': 'value'})
那么,如何将 UID(或与此相关的任何数据)显式发送到可以使用request.auth.uid
(或request.data.uid
)从安全规则中捕获的 Firestore?
解决方案
由于您使用的是 Firebase Admin SDK,因此对 Firestore 的所有访问都使用管理凭据进行,这会绕过您配置的安全规则。无法更改 Admin SDK for Firestore 的这种行为,因此您必须确保您的代码通过 Admin SDK 写入的数据符合您应用的所有业务规则。
我唯一能想到的另一件事是使用Node.js SDK for clients,它允许您像其他客户端一样使用 Firebase 身份验证登录。
推荐阅读
- python - 在python中更改x标签
- excel - 关于通过VBA导入google sheet到excel的问题
- android - genymotion + virtualbox错误
- python-3.x - Networkx - 使用边缘标签、高度和宽度属性、自定义图像导出 graphml
- r - 如何使用 sub 在 R 中提取带有首字母的名称?
- angular - Angular 5 静态注入错误
- amazon-web-services - 如何在 request_spot_instances 中附加 VPC 和子网?
- python - Python——如何成功地从一个对象复制数据并更改一个变量而不更改另一个变量?
- templates - c++0x中模板参数的编译时边界
- colors - JavaFX 8 中的 Color.VALUE 到文本