首页 > 解决方案 > 如何在 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?

标签: node.jsfirebasegoogle-cloud-firestorefirebase-security

解决方案


由于您使用的是 Firebase Admin SDK,因此对 Firestore 的所有访问都使用管理凭据进行,这会绕过您配置的安全规则。无法更改 Admin SDK for Firestore 的这种行为,因此您必须确保您的代码通过 Admin SDK 写入的数据符合您应用的所有业务规则。

我唯一能想到的另一件事是使用Node.js SDK for clients,它允许您像其他客户端一样使用 Firebase 身份验证登录。


推荐阅读