Catch up on everthing we announced at this year's Firebase Summit. Learn more

Güvenlik Kuralları ve Firebase Kimlik Doğrulaması

Firebase Güvenlik Kuralları, birden çok karmaşıklık düzeyini destekleyen bir biçimde erişim denetimi ve veri doğrulaması sağlar. İnşa tabanlı kullanıcı ve kullanıcı verilerinin güvenliğinin korunması rol tabanlı erişim sistemleri için kullanmak Firebase Kimlik Firebase Güvenlik Kurallarına.

Kullanıcıları tanımlayın

Kimlik doğrulama, verilerinize erişim isteyen kullanıcıları tanımlar ve bu bilgileri, kurallarınızda yararlanabileceğiniz bir değişken olarak sağlar. auth değişken aşağıdaki bilgileri içerir:

  • uid : talep kullanıcıya atanan bir benzersiz kullanıcı kimliği.
  • token : Kimlik tarafından toplanan değerlerin bir haritası.

auth.token değişkeni aşağıdaki değerleri içerir:

Alan Açıklama
email Varsa, hesapla ilişkili e-posta adresi.
email_verified true kullanıcı doğruladı eğer erişim sahibi oldukları email adresine. Bazı sağlayıcılar, sahip oldukları e-posta adreslerini otomatik olarak doğrular.
phone_number Varsa, hesapla ilişkili telefon numarası.
name Ayarlanmışsa, kullanıcının görünen adı.
sub Kullanıcının Firebase UID'si. Bu, bir proje içinde benzersizdir.
firebase.identities Bu kullanıcının hesabıyla ilişkili tüm kimliklerin sözlüğü. : Sözlüğün tuşları aşağıdakilerden herhangi biri olabilir email , phone , google.com , facebook.com , github.com , twitter.com . Sözlüğün değerleri, hesapla ilişkili her kimlik sağlayıcısı için benzersiz tanımlayıcı dizileridir. Örneğin, auth.token.firebase.identities["google.com"][0] hesabı ile ilgili birinci hakkında kullanıcı kimliği içerir.
firebase.sign_in_provider Bu belirteci almak için kullanılan oturum açma sağlayıcısı. Aşağıdaki dizelerden biri olabilir custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

Eğer özelleştirilmiş kimlik doğrulama özelliklerini eklemek istiyorsanız, auth.token değişken ayrıca herhangi içeren özel talepler belirttiğiniz.

Kullanıcı talebinde erişim imzalanan olmadığında, auth değişkendir null . Örneğin, kimliği doğrulanmış kullanıcılara okuma erişimi sınırlamak istiyor, eğer Kurallarınızda bu kaldıraç olabilir - auth != null . Ancak, genellikle yazma erişimini daha da sınırlandırmanızı öneririz.

Hakkında daha fazla bilgi için auth değişkeni, referans belgelerine bakın Bulut Firestore , Gerçek Zamanlı Veritabanı ve Bulut Depolama .

Kurallardaki kullanıcı bilgilerinden yararlanın

Pratikte, kurallarınızda kimliği doğrulanmış bilgileri kullanmak, kurallarınızı daha güçlü ve esnek hale getirir. Kullanıcı kimliğine göre verilere erişimi kontrol edebilirsiniz.

Kurallarınızda, bilgi nasıl tanımlamak auth isteyicinin'ın kullanıcı bilgileri - - istenen verilerle ilişkili kullanıcı bilgilerini maçları değişken.

Örneğin, uygulamanız, kullanıcıların yalnızca kendi verilerini okuyup yazabildiğinden emin olmak isteyebilir. Bu senaryoda, arasında bir eşleşme isteyeyim auth.uid değişken ve talep edilen veriler üzerinde kullanıcı kimliği:

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    "users": {
      "$userId": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($userId)
        ".write": "$userId === auth.uid"
      }
    }
  }
}

Bulut depolama

service firebase.storage {
  // Only a user can upload their file, but anyone can view it
  match /users/{userId}/{fileName} {
    allow read;
    allow write: if request.auth != null && request.auth.uid == userId;
  }
}

Özel kullanıcı bilgilerini tanımlayın

Sen daha da artırabilen auth uygulamanızın kullanıcılara atanan özel alanları tanımlamak için değişken.

Örneğin, belirli yollarda yazma erişimi sağlayan bir "yönetici" rolü oluşturmak istediğinizi varsayalım. Bu özniteliği kullanıcılara atar ve ardından yollarda erişim sağlayan kurallarda bunu kullanırsınız.

Cloud Firestore'da, kullanıcıların belgelerine özel bir alan ekleyebilir ve kurallarınıza katıştırılmış bir okuma ile bu alanın değerini alabilirsiniz. Bu nedenle, yönetici tabanlı kuralınız aşağıdaki örneğe benzeyecektir:

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents/some_collection: {
    // Remember that, in Cloud Firestore, reads embedded in your rules are billed operations
    write: if request.auth != null && get(/databases/(database)/documents/users/$(request.auth.uid)).data.admin) == true;
    read: if request.auth != null;
  }
}

Gerçek zamanlı Veritabanı ve Bulut Depolama Kuralları için özel talepler oluşturmamak Doğrulamasında. Daha sonra kullananların özel talepler başvurabilir auth.token değişkeni.

Gerçek Zamanlı Veritabanı

{
  "rules": {
    "some_path/$sub_path": {
      // Create a custom claim for the admin role
      ".write": "auth.uid != null && auth.token.writer == true"
      ".read": "auth.uid != null"
      }
    }
  }

Bulut depolama

service firebase.storage {
  // Create a custom claim for the admin role
  match /files/{fileName} {
    allow read: if request.auth.uid != null;
    allow write: if request.auth.token.admin == true;
  }
}

Kimlik yararlanarak temel Kuralları diğer örnekleri için, bkz Temel Güvenlik Kuralları .