# #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