• 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

Object Storage Arubacloud
+1 głos
232 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 255 wizyt
pytanie zadane 10 listopada 2017 w SQL, bazy danych przez Rajju Nowicjusz (120 p.)
0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 4 czerwca 2022 w JavaScript przez Zaqu93 Gaduła (4,850 p.)
+1 głos
1 odpowiedź 521 wizyt

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,920 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...