• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Firestore - problem z dostępem tylko dla właściciela treści

VPS Starter Arubacloud
+1 głos
230 wizyt
pytanie zadane 25 stycznia 2021 w SQL, bazy danych przez v0p3r Nowicjusz (130 p.)

Tworzę aplikację internetową w React i auth, firestore z firebase, która polega na robienieu notatek itp.

Chciałbym zrobić tak że użytkownicy widzą tylko swoje notatki więc skorzystałem z reguł z dokumentacji google

Podstawowe zasady bezpieczeństwa  |  Firebase (google.com)

 

service cloud.firestore {
  match /databases/{database}/documents {
  // Allow only authenticated content owners access
    match /notes/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId                     
    }                                                                                                   
  }                                                                                                    
}

Ale kiedy próbuję utworzyć dokument, pojawia się ten błąd w konsoli:

Uncaught (in promise) FirebaseError: Missing or insufficient permissions.
at new e (http://localhost:3000/static/js/0.chunk.js:13222:19)
at http://localhost:3000/static/js/0.chunk.js:25490:18
at http://localhost:3000/static/js/0.chunk.js:25491:10
at e.onMessage (http://localhost:3000/static/js/0.chunk.js:25512:6)
at http://localhost:3000/static/js/0.chunk.js:25403:18
at http://localhost:3000/static/js/0.chunk.js:25441:29
at http://localhost:3000/static/js/0.chunk.js:31505:25

Kiedy używam domyślnych reguł, wszystko działa, ale dokumenty są widoczne dla wszystkich użytkowników.

Byłbym wdzięczny za pomoc :)

komentarz 25 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Może nie masz uprawnień do utworzenia dokumentu (skoro nadałeś read i write, ale brakuje create)?

komentarz 25 stycznia 2021 przez v0p3r Nowicjusz (130 p.)
ale odczytywać też nie mogę

1 odpowiedź

+1 głos
odpowiedź 25 stycznia 2021 przez JAKUBW Nałogowiec (33,470 p.)
Gdzie ustawiasz te reguły? Na strone firebase czy w pliku firestore.rules?

Czy podpiąłeś swoją webową aplikację pod emulator firestore czy pod rzeczywistą bazę danych?

Co jak dodasz średnik do lini z allow?
komentarz 25 stycznia 2021 przez v0p3r Nowicjusz (130 p.)

Reguły wpisuje na stronie firebase.

Aplikację podpiąłem normalnie pod firebase.

Logowanie się przez google i firestore na domyślnych regułach (czyli wszystkie dokumenty są widoczne dla każdego użytkownika) działa i mogę dodawać, czytać dokumenty ale gdy zmieniam reguły na te z dokumentacji firebase opisane jako Dostęp tylko dla właściciela treści  wyskakuje mi błąd w konsoli jaki podałem wyżej.

Może trzeba też zmieniać coś w kodzie aplikacji i dodawania dokumentów ale nie wiem.

Średnik na końcu linii też nic nie zdziałał

 

Niżej wstawiam screen z dokumentacji i oczywiście zmieniłem "some_collection" na nazwe mojej kolekcji "notes"


 

komentarz 25 stycznia 2021 przez JAKUBW Nałogowiec (33,470 p.)
Pokaż kod w którym wpisujesz coś do bazy danych. Używałeś testera reguł dostępnego na stronie firebase?
komentarz 25 stycznia 2021 przez v0p3r Nowicjusz (130 p.)

Funkcja która dodaje dokument (działa na domyślnych regułach):

    function addNote() {
        return app.firestore().collection('notes').add({
            title: 'title',
            note: 'note',
            lastUpdate: date,
            authorId: currentUser.uid
        })
    }

W testerze reguł ciągle wyskakuje "Odmowa symulowanego odczytu" i w dodatkowych informacjach nic nie ma.

komentarz 26 stycznia 2021 przez JAKUBW Nałogowiec (33,470 p.)

no tak, bo dodajesz element do kolekcji notes.

Gdy dodajesz w firebase to element dostaje losoweId dokumentu, czyli ścieżka tworzonego dokumentu to /notes/<jakieś_losowe_id>

Ty pozwalasz na zapis do ścieżki /notes/{userId}/*cokolwiek* czyli zupełnie innej, ścieżki

Prawdopodobnie chcesz zapisać dokument o notatce do /notes/<id_notatki>. Więc twoje zasady firebase powinny wyglądać tak

service cloud.firestore {
  match /databases/{database}/documents {
  // Allow only authenticated content owners access
    match /notes/{noteId} {
      allow read: if request.auth != null && request.auth.uid == resource.data.authorId;
      allow write: if request.auth != null && request.auth.uid == request.resource.data.authorId;                     
    }                                                                                                   
  }                                                                                                    
}

 

Podobne pytania

0 głosów
0 odpowiedzi 253 wizyt
pytanie zadane 10 listopada 2017 w SQL, bazy danych przez Rajju Nowicjusz (120 p.)
0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 4 czerwca 2022 w JavaScript przez Zaqu93 Gaduła (4,850 p.)
+1 głos
1 odpowiedź 502 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...