【问题标题】:Is there a good way for testing firebase storage security rules?有没有测试 Firebase 存储安全规则的好方法?
【发布时间】:2023-03-15 07:26:01
【问题描述】:

对于 Firestore,我可以使用模拟器编写测试,但对于存储,不幸的是没有模拟器。

我已经在 firebase 控制台中尝试过模拟器,但我不想每次更改规则时都在其中输入所有测试。

我知道我可以编写测试来针对项目中部署的规则进行测试,但这有几个缺点。

有没有类似于 Firestore 模拟器的存储规则?

【问题讨论】:

  • 目前没有。可能会有那么一天。请提交功能请求以表明兴趣。 firebase.google.com/support/contact/bugs-features
  • @DougStevenson 该死的太快了!谢谢会做!
  • @DougStevenson 所以我做了一些挖掘,发现了这个:Firebase Rules Api。也就是控制台中的模拟器使用的api。我尝试编写一个小脚本来检查我是否可以使用它,但我无法进行身份验证(“错误:调用者没有权限”)。我在 gcloud 控制台中为该 api 生成了一个 api 密钥,但它不起作用。这就是我正在尝试的:gist.github.com/dergoegge/1e9cbf980148ef3febecaf0eeeb0e1fa
  • 听起来你有一个新问题要在 SO 上发布。

标签: firebase testing firebase-storage firebase-security


【解决方案1】:

目前没有支持 firebase 的存储安全规则测试方法,但我发现 Firebase Rules API 具有针对 firestore 和存储规则的单元测试功能。 firebase 控制台中的模拟器也使用此 API。

我为此提交了功能请求,但现在我使用此 API 编写了一个小型 npm 包进行单元测试:

https://www.npmjs.com/package/firebase-security-testing

https://github.com/dergoegge/firebase-security-testing

【讨论】:

    【解决方案2】:

    我认为值得指出的是,您现在还可以在 Firebase 控制台中测试存储安全规则。 (它只是让我从语法更改中获得了很多困惑......)

    【讨论】:

      【解决方案3】:

      Cloud Storage for Firebase 模拟器是 released in July 2021,现在包含在 Build unit tests 文档中。

      下面是一些使用v9 JavaScript API的示例测试代码:

      import { assertFails, initializeTestEnvironment } from '@firebase/rules-unit-testing';
      import { getBytes, ref } from 'firebase/storage';
      
      describe('Storage', () => {
        let testEnv;
      
        beforeAll(async () => {
          testEnv = await initializeTestEnvironment({
            projectId: 'demo-project',
            storage: { rules: fs.readFileSync('storage.rules', 'utf8') },
          });
        }
      
        afterAll(async () => {
          await testEnv.cleanup();
        });
      
        it('disallows access for unauthorized users', async () => {
          const storage = testEnv.unauthenticatedContext().storage();
          await assertFails(getBytes(ref(storage, 'file.json')));
        });
      });
      

      但是,目前(2021 年 12 月下旬)上传到模拟器似乎可能会被破坏:https://github.com/firebase/firebase-tools/issues/3780

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 2021-01-03
        • 2016-11-23
        • 2020-07-03
        • 2020-03-24
        • 2020-09-14
        • 2016-09-27
        • 2020-10-30
        相关资源
        最近更新 更多