• 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

Fiszki IT
Fiszki IT
+1 głos
61 wizyt
pytanie zadane 25 stycznia 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 przez ScriptyChris Mędrzec (164,120 p.)

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

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

1 odpowiedź

+1 głos
odpowiedź 25 stycznia przez JAKUBW Nałogowiec (33,500 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 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 przez JAKUBW Nałogowiec (33,500 p.)
Pokaż kod w którym wpisujesz coś do bazy danych. Używałeś testera reguł dostępnego na stronie firebase?
komentarz 25 stycznia 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 przez JAKUBW Nałogowiec (33,500 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 200 wizyt
pytanie zadane 10 listopada 2017 w SQL, bazy danych przez Rajju Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 43 wizyt
0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 23 czerwca 2018 w SQL, bazy danych przez sauber94 Nowicjusz (140 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

84,720 zapytań

133,524 odpowiedzi

295,917 komentarzy

55,996 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...