【问题标题】:Firestore rules are not working in emulator for cloud functionsFirestore 规则不适用于云功能的模拟器
【发布时间】:2021-05-11 15:13:16
【问题描述】:

我正在使用演示示例

const functions = require('firebase-functions');
var message = "message";

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

exports.addMessage = functions.https.onRequest(async (req, res) => {
  const original = req.query.text;
  const writeResult = await admin.firestore().collection(message).add({original: original});
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

exports.makeUppercase = functions.firestore.document('/' + message + '/{documentId}')
    .onCreate((snap, context) => {
      const original = snap.data().original;
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      return snap.ref.set({uppercase}, {merge: true});
    });

这是我的规则-

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    match /{document=**} {
      allow read, write: if false;
    }
  }
}

我的预期是,如果允许读写设置为 false,makeUppercase 将不会执行。我知道 addMessage 会因为管理员权限而工作,但为什么 makeUppercase 在模拟器中执行。

【问题讨论】:

    标签: javascript firebase google-cloud-platform google-cloud-firestore google-cloud-functions


    【解决方案1】:

    Firestore 数据库的安全规则仅适用于来自客户端 SDK 的数据访问,例如 Android、iOS 和基于浏览器的 Web 的数据访问。

    Cloud Functions 使用 Admin SDK 访问 Firestore,这意味着它们具有管理权限并绕过安全规则。此行为(适用于模拟器和生产环境)无法更改。

    【讨论】:

    • 谢谢!弗兰克,但如果我想在触发器上设置验证规则怎么办?
    • 无法更改此行为:Firestore 的安全规则未经过评估以通过 Admin SDK 进行访问。
    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2021-11-18
    • 1970-01-01
    • 2019-11-09
    • 2019-12-27
    • 2018-04-02
    相关资源
    最近更新 更多