सुरक्षा के नियम और Firebase से पुष्टि करने की सुविधा

Firebase Security Rules, ऐक्सेस कंट्रोल और डेटा की पुष्टि करने के लिए ऐसे फ़ॉर्मैट में उपलब्ध कराता है जो काम करता हो कई लेवल की मुश्किल हो सकती है. उपयोगकर्ता और भूमिका पर आधारित ऐक्सेस सिस्टम बनाने के लिए जो उपयोगकर्ताओं को जोड़े रखता है डेटा को सुरक्षित रखता है, Firebase Authentication का इस्तेमाल इसके साथ करें Firebase Security Rules.

उपयोगकर्ताओं को पहचानें

Authentication आपके डेटा के ऐक्सेस का अनुरोध करने वाले उपयोगकर्ताओं की पहचान करता है और यह जानकारी देता है जानकारी को वैरिएबल के रूप में इस्तेमाल किया जा सकता है, जिसका फ़ायदा अपने नियमों में लिया जा सकता है. auth वैरिएबल यह जानकारी शामिल होती है:

  • uid: यह एक यूनीक यूज़र आईडी होता है, जो अनुरोध करने वाले उपयोगकर्ता को असाइन किया जाता है.
  • token: Authentication से इकट्ठा की गई वैल्यू का मैप.

auth.token वैरिएबल में ये वैल्यू शामिल हैं:

फ़ील्ड ब्यौरा
email अगर खाते से जुड़ा ईमेल पता मौजूद है, तो उसे डालें.
email_verified true अगर उपयोगकर्ता ने पुष्टि कर दी है कि उसके पास email पते का ऐक्सेस है. कुछ कंपनियां अपने मालिकाना हक वाले ईमेल पतों की पुष्टि अपने-आप करती हैं.
phone_number खाते से जुड़ा फ़ोन नंबर, अगर मौजूद हो.
name अगर सेट हो, तो उपयोगकर्ता का डिसप्ले नेम.
sub उपयोगकर्ता का Firebase यूआईडी. यह किसी प्रोजेक्ट के लिए यूनीक होता है.
firebase.identities इस उपयोगकर्ता के खाते से जुड़ी सभी पहचानों की डिक्शनरी. शब्दकोश की कुंजियां इनमें से कोई भी हो सकती हैं: email, phone, google.com, facebook.com, github.com, twitter.com. डिक्शनरी की वैल्यू, खाते से जुड़े हर आइडेंटिटी प्रोवाइडर के यूनीक आइडेंटिफ़ायर की कैटगरी होती हैं. उदाहरण के लिए, auth.token.firebase.identities["google.com"][0] में खाते से जुड़ा पहला Google यूज़र आईडी शामिल होता है.
firebase.sign_in_provider इस टोकन को पाने के लिए, साइन इन करने की सेवा देने वाली कंपनी का इस्तेमाल किया गया. यह इनमें से कोई एक स्ट्रिंग हो सकती है: custom, password, phone, anonymous, google.com, facebook.com, github.com, twitter.com.
firebase.tenant अगर खाते से जुड़ा किराये पर इस्तेमाल करने वाला व्यक्ति मौजूद है, तो उसका आईडी. उदाहरण के लिए, tenant2-m6tyz

अगर आपको पुष्टि करने वाले कस्टमाइज़ किए गए एट्रिब्यूट जोड़ने हैं, तो auth.token वैरिएबल में सभी कस्टम दावे भी शामिल हैं आपकी सहायता के लिए तैयार किया गया है.

अगर ऐक्सेस का अनुरोध करने वाले उपयोगकर्ता ने साइन इन नहीं किया है, तो auth वैरिएबल null होता है. अपने नियमों में इसका फ़ायदा लिया जा सकता है, उदाहरण के लिए, अगर आपको रीड सीमित करना है पुष्टि किए गए उपयोगकर्ताओं का ऐक्सेस — auth != null. हमारा सुझाव है कि लिखने के ऐक्सेस को और सीमित करना.

auth वैरिएबल के बारे में ज़्यादा जानकारी के लिए, रेफ़रंस देखें दस्तावेज़ Cloud Firestore, Realtime Database, और Cloud Storage.

नियमों में मौजूद उपयोगकर्ता की जानकारी का फ़ायदा उठाएं

व्यावहारिक तौर पर, अपने नियमों में प्रमाणित जानकारी का इस्तेमाल करने से आपके नियम ज़्यादा शक्तिशाली और सुविधाजनक. उपयोगकर्ता के आधार पर, डेटा के ऐक्सेस को कंट्रोल किया जा सकता है पहचान.

अपने नियमों में तय करें कि auth वैरिएबल में मौजूद जानकारी किस तरह — अनुरोधकर्ता की उपयोगकर्ता जानकारी — का अनुरोध किया गया है.

उदाहरण के लिए, हो सकता है कि आपका ऐप्लिकेशन यह पक्का करना चाहे कि उपयोगकर्ता इस्तेमाल किया जा सकता है. इस स्थिति में, आपको अनुरोध किए गए डेटा के लिए, auth.uid वैरिएबल और यूज़र आईडी:

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, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Realtime Database

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

Cloud Storage

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

कस्टम उपयोगकर्ता की जानकारी तय करना

असाइन किए गए कस्टम फ़ील्ड को तय करने के लिए, auth वैरिएबल का इस्तेमाल किया जा सकता है उपयोगकर्ताओं को सूचना देने की सुविधा होती है.

उदाहरण के लिए, मान लें कि आपको "एडमिन" बनाना है ऐसी भूमिका जो लिखने का ऐक्सेस देती है कुछ खास पाथ पर. आपको वह एट्रिब्यूट उपयोगकर्ताओं को असाइन करना होगा और तो पाथ पर ऐक्सेस देने वाले नियमों में इसका इस्तेमाल किया जा सकता है.

Cloud Firestore में, आपके पास उपयोगकर्ताओं की दस्तावेज़ और डेटा इकट्ठा करना आपके नियमों में एम्बेड किए गए रीड के साथ उस फ़ील्ड की वैल्यू. इसलिए, नियम कैसा दिखेगा, इसका उदाहरण यहां दिया गया है:

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

Authentication में पसंद के मुताबिक दावे बनाने के बाद, Rules में जाकर, पसंद के मुताबिक दावे ऐक्सेस किए जा सकते हैं. इसके बाद आप auth.token वैरिएबल का इस्तेमाल करके उन कस्टम दावों का रेफ़रंस दें.

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

Realtime Database

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

Cloud Storage

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

Authentication इस्तेमाल करने के बेसिक Rules के और उदाहरण देखने के लिए, यहां देखें सुरक्षा के बुनियादी नियम.