Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Firebase Güvenlik Kuralları, birden çok karmaşıklık düzeyini destekleyen bir biçimde erişim denetimi ve veri doğrulaması sağlar. Kullanıcılarınızın verilerini güvende tutan kullanıcı tabanlı ve rol tabanlı erişim sistemleri oluşturmak için Firebase Güvenlik Kuralları ile Firebase Authentication'ı kullanın.

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şkeni aşağıdaki bilgileri içerir:

  • uid : İstekte bulunan kullanıcıya atanan benzersiz bir kullanıcı kimliği.
  • token : Kimlik Doğrulama tarafından toplanan değerlerin bir haritası.

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

Alan Tanım
email Varsa, hesapla ilişkili e-posta adresi.
email_verified kullanıcı email adresine erişimi olduğunu doğrulamışsa true . 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 anahtarları şunlardan 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] , hesapla ilişkilendirilen ilk Google kullanıcı kimliğini içerir.
firebase.sign_in_provider Bu belirteci almak için kullanılan oturum açma sağlayıcısı. Şu dizelerden biri olabilir: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .
firebase.tenant Varsa, hesapla ilişkili kiracı kimliği. örneğin tenant2-m6tyz

Özelleştirilmiş kimlik doğrulama öznitelikleri eklemek istiyorsanız, auth.token değişkeni belirttiğiniz tüm özel talepleri de içerir.

Erişim isteyen kullanıcı oturum açmadığında, auth değişkeni null olur. Örneğin, okuma erişimini kimliği doğrulanmış kullanıcılarla sınırlamak istiyorsanız, bunu kurallarınızda kullanabilirsiniz — auth != null . Ancak, genellikle yazma erişimini daha da sınırlandırmanızı öneririz.

auth değişkeni hakkında daha fazla bilgi için Cloud Firestore , Realtime Database ve Cloud Storage başvuru belgelerine bakın.

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, auth değişkenindeki (istek sahibinin kullanıcı bilgileri) bilgilerin, istenen verilerle ilişkili kullanıcı bilgileriyle nasıl eşleştiğini tanımlayın.

Örneğin, uygulamanız, kullanıcıların yalnızca kendi verilerini okuyup yazabildiğinden emin olmak isteyebilir. Bu senaryoda, auth.uid değişkeni ile istenen verilerdeki kullanıcı kimliği arasında bir eşleşme olmasını istersiniz:

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

Uygulamanızın kullanıcılarına atanan özel alanları tanımlamak için auth değişkeninden daha fazla yararlanabilirsiniz.

Ö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;
  }
}

Kimlik Doğrulama'da özel talepler oluşturduktan sonra Kurallar'da özel taleplere erişebilirsiniz. Ardından, auth.token değişkenini kullanarak bu özel taleplere başvurabilirsiniz.

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, check for an admin claim
    allow write: if request.auth.token.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if request.auth.token.reader == "true";
     allow write: if request.auth.token.writer == "true";
   }
  }
}

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 Doğrulamadan yararlanan temel Kurallara ilişkin daha fazla örnek görmek için bkz. Temel Güvenlik Kuralları .