• 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

+1 głos
536 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,170 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 336 wizyt
pytanie zadane 10 listopada 2017 w SQL, bazy danych przez Rajju Nowicjusz (120 p.)
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 4 czerwca 2022 w JavaScript przez Zaqu93 Gaduła (4,850 p.)
+1 głos
1 odpowiedź 1,033 wizyt

93,720 zapytań

142,633 odpowiedzi

323,264 komentarzy

63,267 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...