Проверка правил Firebase не проходит даже при использовании блокировки

# #google-cloud-firestore #firebase-security #firebase-tools

Вопрос:

Я пытаюсь проверить свои правила firebase, но они, похоже, не проходят, даже когда я использую режим блокировки. Я последовал за гидом в https://firebase.google.com/docs/firestore/security/test-rules-emulator

 const firebase = require('@firebase/rules-unit-testing');
const fs = require('fs');

const projectId = 'test-judge';

function getAuthedFirestore(auth) {
    return firebase.initializeAdminApp({
        projectId: projectId,
        auth: auth
    }).firestore();
}

beforeEach(async () => {
    await firebase.clearFirestoreData({ projectId });
});

before(async () => {
    const rules = fs.readFileSync('firestore.rules', 'utf8');
    await firebase.loadFirestoreRules({
        projectId: projectId,
        rules: rules
    });
});

after(async () => {
    await Promise.all(firebase.apps().map(app => app.delete()));
});

describe('locked down', () => {
    it("require users to log in before creating a profile", async () => {
        const db = getAuthedFirestore(null);
        const profile = db.collection("users").doc("alice");
        await firebase.assertFails(profile.set({ birthday: "January 1" }));
    });
});

 

вот мой firebase.json

 {
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  }
}

 

и мой package.json

 {
    "devDependencies": {
        "firebase-admin": "^9.11.0",
        "@firebase/app": "^0.6.29",
        "@firebase/rules-unit-testing": "^1.3.12",
        "mocha": "^9.0.3",
        "fs-extra": "^10.0.0"
    },
    "scripts": {
        "test": "mocha"
    }
}

 

и вот firestore.rules

 rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}
 

Мне не кажется, что я делаю что-то не так, но если я запущу npm test тест, он провалится. Я ожидаю, что это пройдет, так asserFails как используется, и в правилах я возвращаю false

Я не смогу установить значение, которое должен пройти тест

вот мой вывод

 Warning: FIRESTORE_EMULATOR_HOST not set, using default value localhost:8080
  locked down
    1) require users to log in before creating a profile


  0 passing (324ms)
  1 failing

  1) locked down
       require users to log in before creating a profile:
     Error: Expected request to fail, but it succeeded.
      at C:UsersMoneerDesktopjudge_rulesnode_modules@firebaserules-unit-testingdistindex.cjs.js:581:31
      at async Context.<anonymous> (testtest.js:33:9)



npm ERR! Test failed.  See above for more details.
 

Ответ №1:

Это ожидаемое поведение, Правила безопасности-это то, что защищает ваши серверные службы от вредоносных запросов клиентов. «AdminApp» относится к Admin-SDK, который является сервисным средством, взаимодействующим со службами Firebase непосредственно за Правилами безопасности.

Для справки, вы заметите, что для SDK администратора обычно требуются учетные данные учетной записи службы, которые позволяют SDK проходить аутентификацию в службах GCP IAM

Ответ №2:

Просто понял, что я должен использовать initializeTestApp не initializeAdminApp