Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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

Firebase Güvenlik Kuralları, birden fazla karmaşıklığı destekleyen bir biçimde erişim kontrolü 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ıyla Firebase Kimlik Doğrulaması'nı 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 kullanabileceğiniz bir değişken olarak sunar. auth değişkeni aşağıdaki bilgileri içerir:

  • uid : uid bulunan kullanıcıya atanan benzersiz bir kullanıcı kimliği.
  • token : Kimlik Doğrulama tarafından toplanan değerlerin 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 kullanıcı, email adresine erişimi olduğunu doğruladıysa true . Bazı sağlayıcılar sahip oldukları e-posta adreslerini otomatik olarak doğrular.
phone_number Varsa, hesapla ilişkilendirilmiş telefon numarası.
name Kullanılıyorsa, 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ı github.com 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şkilendirilmiş ilk Google kullanıcı kimliğini içerir.
firebase.sign_in_provider Oturum açma sağlayıcısı bu belirteci elde etmek için kullanılır. Şu dizelerden biri olabilir: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

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

Erişim isteyen kullanıcı oturum açmadığında, auth değişkeni null . Örneğin, kimliği doğrulanmış kullanıcılara okuma erişimini sınırlamak istiyorsanız, kurallarınızda bunu 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 , Gerçek Zamanlı Veritabanı ve Depolama referans belgelerine bakın.

Kurallarda kullanıcı bilgilerini kullanın

Uygulamada, kurallarınızda doğrulanmış bilgilerin kullanılması 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 bilgilerin (istekte bulunanın kullanıcı bilgileri) 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 okuyabildiğinden ve 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:

Cloud 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, update, delete: if request.auth != null && request.auth.uid == userId;
      allow create: if request.auth != null;
    }
  }
}
 

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"
      }
    }
  }
}
 

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ımlama

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şimini sağlayan bir "yönetici" rolü oluşturmak istediğinizi varsayalım. Bu özelliği kullanıcılara atar ve ardından yollara erişim izni veren kurallarda 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. Yani, yönetici tabanlı kuralınız aşağıdaki örneğe benzer:

Cloud Firestore

 service cloud.firestore {
  match "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 Depolamadaki Kurallar için Kimlik Doğrulama'da özel hak talepleri oluşturun . Daha sonra auth.token değişkenini kullanarak bu özel taleplere auth.token .

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"
      }
    }
  }
 

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