Firebase Regulile de securitate ale bazei de date în timp real reprezintă modul în care vă asigurați datele de la utilizatori neautorizați și protejați structura datelor.
În acest tutorial rapid, vă voi explica modul de configurare a regulilor de securitate a bazei de date în mod corespunzător, astfel încât numai utilizatorii autorizați să aibă acces la citire sau scriere a datelor. De asemenea, vă voi arăta cum să vă structurați datele pentru a vă asigura că este ușor de asigurat.
Să presupunem că avem date JSON în baza noastră de date Firebase, ca în exemplul de mai jos:
"utilizatori": "user1": "firstName": "Chike", "lastName": "Mgbemena", "age2" ":" Ono "," lastName ": 543," Nume ":" Okwara "," Age " vârstă ": 90" phoneNumber ":" 07012345678 ", ...
Privind la baza de date, puteți vedea că există unele probleme cu datele noastre:
user1
și user3
) au aceleași numere de telefon. Am dori ca acestea să fie unice.user3
are un număr pentru numele de familie, în loc de un șir.utilizator2
are doar șapte cifre în numărul de telefon, în loc de 11. user1
și utilizator2
este un șir, în timp ce user3
este un număr.Cu toate aceste deficiențe evidențiate în datele noastre, am pierdut integritatea datelor. În pașii următori, vă voi arăta cum să împiedicați acest lucru.
Baza de date Firebase în timp real are următoarele tipuri de reguli:
Tip | Funcţie |
---|---|
.citit | Descrie dacă și când datele pot fi citite de utilizatori. |
.scrie | Descrieți dacă și când se permite scrierea datelor. |
.valida | Definește ce va arăta o valoare corect formată, dacă are atribute copil și tipul de date. |
.indexOn | Specifică un copil pentru indexare pentru a susține ordonarea și interogarea. |
Citiți mai multe despre ele în documentele Firebase.
Aici este o regulă foarte permisivă pentru utilizatori
cheie în baza noastră de date.
"rules": "users": // utilizatorii pot fi citiți de oricine ".read": true, // users este scris de oricine ".write": true
Acest lucru este rău, deoarece îi dă oricui posibilitatea de a citi sau de a scrie date în baza de date. Oricine poate accesa calea / utilizatori /
precum și căi mai profunde. Nu numai că, dar nu se impune nicio structură asupra datelor utilizatorilor.
"reguli": "utilizatori": "$ uid": ".read": "auth.uid == $ uid", ".write": "auth.uid == $ uid",
Cu aceste reguli, controlăm accesul la înregistrările utilizatorilor către utilizatorii conectați. Nu numai că, dar utilizatorii pot citi sau scrie numai propriile date. Facem asta cu un wildcard: $ uid
. Aceasta este o variabilă care reprezintă cheia copil (numele variabilelor încep cu $
). De exemplu, accesarea căii / Utilizatorii / USER1
, $ uid
este "User1"
.
Apoi, facem uz de AUTH
, care reprezintă utilizatorul autentificat în prezent. Aceasta este o variabilă de server predefinită furnizată de Firebase. În liniile 5 și 6, impunem o constrângere de accesibilitate pe care doar utilizatorul autentificat cu același id ca și înregistrarea utilizatorului poate citi sau scrie datele sale. Cu alte cuvinte, pentru fiecare utilizator, accesul la citire și scriere este acordat / utilizatori /
, Unde
reprezintă ID-ul de utilizator autentificat curent.
Alte variabile ale serverului Firebase sunt:
acum | Timpul curent în milisecunde de la epoca Linux. |
rădăcină | A RuleDataSnapshot reprezentând calea principală din baza de date Firebase așa cum există înainte de operația încercată. |
newData | A RuleDataSnapshot reprezentând datele așa cum ar exista după operația încercată. Acesta include noile date scrise și datele existente. |
date | Un snapshot de reguli care reprezintă datele așa cum a existat înainte de operația încercată. |
AUTH | Reprezintă o încărcătură utilă a tokenului autentificată de utilizator. |
Citiți mai multe despre aceste și alte variabile ale serverului din fișierele Firebase.
De asemenea, putem folosi regulile Firebase pentru a impune constrângeri asupra datelor din baza noastră de date.
De exemplu, în regulile următoare, în liniile 8 și 11, asigurăm reguli ca orice valoare nouă pentru numele și prenumele să fie un șir. În linia 14, ne asigurăm că vârsta este un număr. În cele din urmă, în liniile 17 și 18, ne asigurăm că valoarea numărului de telefon trebuie să fie un șir și o lungime de 11.
"reguli": "users": ".read": "auth.uid == $ uid", ".write": "auth.uid == $ uid" : ".validate": "newData.isString ()", "lastName": ".validate": "newData.isString ()" ), "phoneNumber": ".validate": "newData.isString () && newData.val () lungime == 11",
Dar cum putem preveni numerele de telefon duplicat?
Apoi, vă voi arăta cum să împiedicați numerele de telefon duplicate.
Primul lucru pe care trebuie să-l facem este să modificăm calea principală pentru a include un nivel de nivel superior /numere de telefon/
nodul. Deci, atunci când creăm un utilizator nou, vom adăuga, de asemenea, numărul de telefon al utilizatorului la acest nod atunci când validarea are succes. Noua noastră structură de date va arăta astfel:
"utilizatori": "user1": "firstName": "Chike", "lastName": "Mgbemena", "age": 89, "phoneNumber": "07012345678" : "Owen", "LastName": "Owwara", "Agewill", "Age": 12, "PhoneNumber": "06034345453" vârstă ": 90," phoneNumber ":" 09034564543 ", ...," numere de telefon ": 07012345678" "user1", "06034345453": "user3";
Trebuie să modificăm regulile de securitate pentru a impune structura de date:
"reguli": "utilizatori": "$ uid": ... "phoneNumber": ".validate": "newData.isString () && newData.val () ("Numere de telefon"), copil (newData.val ()) există () ",
Aici, ne asigurăm că numărul de telefon este unic, verificând dacă acesta este deja copil /numere de telefon/
nod cu numărul de telefon dat ca cheie. Cu alte cuvinte, verificăm faptul că numărul de telefon nu a fost deja înregistrat de un utilizator. Dacă nu, atunci validarea are succes și operația de scriere va fi acceptată - altfel va fi respinsă.
Aplicația va trebui să adauge numărul de telefon în lista de numere de telefon atunci când creează un utilizator nou și va trebui să ștergă un număr de telefon al unui utilizator dacă acel utilizator este șters.
Puteți simula regulile dvs. de securitate în Consola Firebase făcând clic pe Simulator buton. Adăugați regulile de securitate, selectați tipul de simulare (citiți sau scrieți), introduceți date cu o cale și faceți clic pe Alerga buton:
Dacă valoarea primului nume este un număr în loc de un șir, validarea va eșua și accesul la scriere nu va fi acceptat:
În acest tutorial rapid, ați aflat despre regulile de securitate ale bazei de date Firebase: cum să preveniți accesul neautorizat la date și cum să vă asigurați că datele din baza de date sunt structurate.
Pentru a afla mai multe despre regulile de securitate ale bazei de date Firebase, consultați documentația oficială. Și verificați câteva dintre celelalte tutoriale și cursuri de la Firebase despre Envato Tuts+!