Firebase Realtime Database sikkerhetsregler er hvordan du sikrer dataene dine fra uautoriserte brukere og beskytter data strukturen.
I denne raske tipsveiledningen vil jeg forklare hvordan du konfigurerer databasets sikkerhetsregler riktig slik at kun autoriserte brukere har lese eller skrive tilgang til data. Jeg vil også vise deg hvordan du strukturerer dataene dine for å gjøre det enkelt å sikre.
La oss anta at vi har JSON-data i vår Firebase-database, som i eksemplet nedenfor:
"users": "user1": "firstName": "Chike", "LastName": "Mgbemena", "age": "89" "phoneNumber": "07012345678", "user2": "firstName "" Godswill "," LastName ":" Okwara "," Age ":" 12 "" phoneNumber ":" 0701234 "," user3 ": " firstName ":" Onu "," LastName ": 543," alder ": 90" telefonnummer ":" 07012345678 ", ...
Ser på databasen, kan du se at det er noen problemer med våre data:
bruker1
og bruker3
) har samme telefonnummer. Vi vil at disse skal være unike.bruker3
har et nummer for etternavn, i stedet for en streng.bruker2
har bare syv siffer i telefonnummeret, i stedet for 11. bruker1
og bruker2
er en streng, mens den av bruker3
er et tall.Med alle disse feilene fremhevet i våre data, har vi mistet dataintegritet. I de følgende trinnene vil jeg vise deg hvordan du kan forhindre at disse forekommer.
Firebase-realtidsdatabasen har følgende regeltyper:
Type | Funksjon |
---|---|
.lese | Beskriver om og når data må leses av brukerne. |
.skrive | Beskriv om og når data skal skrives. |
.validere | Definerer hva en riktig formatert verdi vil se ut, om den har barnattributter og datatypen. |
.indexOn | Angir et barn for å indeksere for å støtte bestilling og spørring. |
Les mer om dem i Firebase docs.
Her er en veldig permissiv regel for brukere
tast inn vår database.
"regler": "brukere": // brukere kan leses av noen ".les": true, // brukere kan skrives av noen ".write": true
Dette er dårlig, fordi det gir alle muligheten til å lese eller skrive data til databasen. Alle kan få tilgang til banen / brukere /
så vel som dypere stier. Ikke bare det, men ingen struktur er pålagt brukerens data.
"regler": "brukere": "$ uid": ".read": "auth.uid == $ uid", ".write": "auth.uid == $ uid",
Med disse reglene styrer vi tilgangen til brukerdataene til innloggede brukere. Ikke bare det, men brukere kan bare lese eller skrive sine egne data. Vi gjør dette med et jokertegn: $ uid
. Dette er en variabel som representerer barnnøkkelen (variabelnavn begynner med $
). For eksempel, tilgang til banen / Brukere / bruker1
, $ uid
er "Bruker1"
.
Deretter bruker vi auth
variabel, som representerer den nåværende autentiserte brukeren. Dette er en forhåndsdefinert servervariabel som leveres av Firebase. I linjene 5 og 6 håndhever vi en tilgjengelighetsbegrensning som bare den autentiserte brukeren med samme ID som brukeroppføringen kan lese eller skrive sine data. Med andre ord, for hver bruker, blir lese og skrive tilgang gitt til / brukere /
, hvor
representerer det nåværende autentiserte bruker-ID.
Andre Firebase-servervariabler er:
nå | Nåværende tid i millisekunder siden Linux-epoken. |
rot | EN RuleDataSnapshot som representerer roten banen i Firebase databasen som den eksisterer før forsøket. |
NewData | EN RuleDataSnapshot som representerer dataene som det ville eksistere etter forsøket. Den inneholder de nye dataene som skrives og eksisterende data. |
data | En RuleDataSnapshot representerer dataene som den eksisterte før forsøket. |
auth | Representerer en godkjent brukers token nyttelast. |
Les mer om disse og andre servervariabler i Firebase-dokumentene.
Vi kan også bruke Firebase-regler for å håndheve begrensninger på dataene i databasen vår.
For eksempel, i følgreglene, i linjene 8 og 11, sikrer vi regler som enhver ny verdi for fornavn og etternavn må være en streng. I linje 14 sørger vi for at alder er et nummer. Til slutt, i linjene 17 og 18, håndhever vi at telefonnummerverdien må være en streng og med lengde 11.
"user": "$ uid": ".read": "auth.uid == $ uid", ".write": "auth.uid == $ uid", "firstName" : ".validate": "newData.isString ()", "LastName": ".validate": "newData.isString ()", "alder": ".validere": "newData.isNumber ) "," telefonnummer ": " .validere ":" newData.isString () && newData.val (). lengde == 11 ",
Men hvordan hindrer vi dupliserte telefonnumre?
Deretter vil jeg vise deg hvordan du kan forhindre dupliserte telefonnumre.
Det første vi må gjøre er å modifisere roten til å inkludere et toppnivå /telefonnummer/
node. Så, når du oppretter en ny bruker, vil vi også legge til brukerens telefonnummer til denne noden når validering er vellykket. Vår nye datastruktur vil se ut som følgende:
"users": "user1": "firstName": "Chike", "LastName": "Mgbemena", "alder": 89, "phoneNumber": "07012345678", "user2": "firstName" : "Godswill", "etternavn": "Okwara", "alder": 12, "telefonnummer": "06034345453", "user3": "firstName": "Onu", "LastName": "Emeka" alder ": 90," telefonnummer ":" 09034564543 ", ...," phoneNumbers ": " 07012345678 ":" user1 "," 06034345453 ":" user2 "," 09034564543 ":" user3 ", ...
Vi må endre sikkerhetsreglene for å håndheve datastrukturen:
"regler": "brukere": "$ uid": ... "phoneNumber": ".validere": "newData.isString () && newData.val (). lengde == 11 &&! root.child ('phoneNumbers'). barn (newData.val ()). eksisterer () ",
Her sørger vi for at telefonnummeret er unikt ved å sjekke om det allerede er et barn av /telefonnummer/
nod med det oppgitte telefonnummeret som nøkkel. Vi kontrollerer med andre ord at telefonnummeret ikke allerede er registrert av en bruker. Hvis den ikke har det, er validering vellykket og skrivoperasjonen vil bli akseptert ellers vil den bli avvist.
Appen din må legge til telefonnummeret til telefonnummerlisten når du oppretter en ny bruker, og den må slette brukerens telefonnummer dersom brukeren slettes.
Du kan simulere sikkerhetsreglene i Firebase-konsollen ved å klikke på Simulator knapp. Legg til dine sikkerhetsregler, velg typen av simulering (enten lese eller skrive), skriv inn noen data med en bane, og klikk på Løpe knapp:
Hvis verdien av fornavnet er et tall i stedet for en streng, vil valideringen mislykkes, og skrivetilgang nektes:
I denne raske tipsveiledningen har du lært om Firebase Database sikkerhetsregler: hvordan du forhindrer uautorisert tilgang til data og hvordan du sikrer at data i databasen er strukturert.
For å lære mer om Firebase Database sikkerhetsregler, se den offisielle dokumentasjonen. Og sjekk ut noen av våre andre Firebase-opplæringsprogrammer og kurs her på Envato Tuts+!