Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

قواعد الأمان ومصادقة Firebase

توفر قواعد أمان Firebase التحكم في الوصول والتحقق من صحة البيانات بتنسيق يدعم مستويات متعددة من التعقيد. لبناء المستعمل القاعدة وأنظمة الوصول القائم على الدور الذي حفاظ على البيانات آمنة المستخدمين، استخدام مصادقة Firebase مع قواعد الأمن Firebase.

تحديد المستخدمين

تحدد المصادقة المستخدمين الذين يطلبون الوصول إلى بياناتك وتوفر هذه المعلومات كمتغير يمكنك الاستفادة منه في قواعدك. و auth متغير يحتوي على المعلومات التالية:

  • uid : معرف المستخدم فريدة من نوعها، المخصصة للمستخدم الطالبة.
  • token : خريطة للقيم التي جمعتها المصادقة.

و auth.token يحتوي على متغير القيم التالية:

حقل وصف
email عنوان البريد الإلكتروني المرتبط بالحساب ، إن وجد.
email_verified true إذا كان التحقق من المستخدم لديهم إمكانية الوصول إلى email العنوان. يقوم بعض المزودين بالتحقق تلقائيًا من عناوين البريد الإلكتروني التي يمتلكونها.
phone_number رقم الهاتف المرتبط بالحساب ، إن وجد.
name اسم عرض المستخدم ، إذا تم تعيينه.
sub معرّف Firebase UID الخاص بالمستخدم. هذا فريد داخل المشروع.
firebase.identities قاموس لجميع الهويات المرتبطة بحساب هذا المستخدم. مفاتيح القاموس يمكن أن يكون أي من الإجراءات التالية: email ، phone ، google.com ، facebook.com ، github.com ، twitter.com . قيم القاموس هي مصفوفات من المعرفات الفريدة لكل موفر هوية مرتبط بالحساب. على سبيل المثال، auth.token.firebase.identities["google.com"][0] يحتوي على أول هوية المستخدم جوجل المرتبطة بالحساب.
firebase.sign_in_provider موفر تسجيل الدخول المستخدم للحصول على هذا الرمز المميز. يمكن أن تكون واحدة من السلاسل التالية: custom ، password ، phone ، anonymous ، google.com ، facebook.com ، github.com ، twitter.com .

إذا كنت ترغب في إضافة سمات التوثيق حسب الطلب، auth.token يحتوي على متغير أيضا أي مطالبات العرف الذي تحدده.

عندما لا يتم التوقيع على وصول المستخدم الطالبة و، و auth المتغير هو null . يمكنك الاستفادة من هذا في القواعد الخاصة بك إذا، على سبيل المثال، تريد للحد من الوصول للقراءة إلى المستخدمين المصادق عليهم - auth != null . ومع ذلك ، فإننا نوصي بشكل عام بالحد من الوصول للكتابة بشكل أكبر.

لمزيد من المعلومات حول auth متغير، راجع وثائق مرجعية لل سحابة Firestore ، قاعدة البيانات في الوقت الحقيقي ، و سحابة التخزين .

الاستفادة من معلومات المستخدم في القواعد

من الناحية العملية ، فإن استخدام المعلومات المصادق عليها في قواعدك يجعل قواعدك أكثر قوة ومرونة. يمكنك التحكم في الوصول إلى البيانات بناءً على هوية المستخدم.

في القواعد الخاصة بك، وتحديد كيفية استخدام المعلومات في auth متغير - معلومات المستخدم الطالب - مباريات معلومات المستخدم المرتبطة البيانات المطلوبة.

على سبيل المثال ، قد يرغب تطبيقك في التأكد من أن المستخدمين يمكنهم قراءة بياناتهم الخاصة وكتابتها فقط. في هذا السيناريو، فإن كنت ترغب في مباراة بين auth.uid متغير ومعرف المستخدم على البيانات المطلوبة:

سحابة 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;
    }
  }
}

قاعدة بيانات الوقت الحقيقي

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

سحابة التخزين

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 ، يمكنك إضافة حقل مخصص إلى مستندات المستخدمين واسترداد قيمة هذا الحقل بقراءة مضمنة في قواعدك. لذلك ، ستبدو القاعدة المستندة إلى المسؤول مثل المثال التالي:

سحابة 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;
  }
}

للقوانين في قاعدة البيانات في الوقت الحقيقي وتخزين السحاب، خلق المطالبات مخصصة في المصادقة. يمكنك ثم الرجوع تلك المطالبات مخصص باستخدام auth.token متغير.

قاعدة بيانات الوقت الفعلي

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

سحابة التخزين

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

لرؤية المزيد من الأمثلة على قواعد الأساسية الاستفادة من مصادقة، انظر قواعد الأمان الأساسية .