المصادقة مع Firebase باستخدام حسابات مستندة إلى كلمة المرور باستخدام Unity

يمكنك استخدام Firebase Authentication للسماح للمستخدمين بالمصادقة باستخدام Firebase باستخدام عناوين بريدهم الإلكتروني وكلمات مرورهم، وإدارة حسابات تطبيقك المستندة إلى كلمة المرور.

قبل البدء

لاستخدام Firebase Authentication، عليك إجراء ما يلي:

  • سجِّل مشروع Unity وأعدّه لاستخدام Firebase.

    • إذا كان مشروعك على Unity يستخدم Firebase، يعني ذلك أنّه سبق أن تم تسجيله وإعداده لاستخدام Firebase.

    • إذا لم يكن لديك مشروع Unity، يمكنك تنزيل نموذج تطبيق.

  • أضِف Firebase حزمة تطوير البرامج (SDK) Unity (على وجه التحديد، FirebaseAuth.unitypackage) إلى مشروعك على Unity.

تجدر الإشارة إلى أنّ إضافة Firebase إلى مشروعك على Unity تتضمن مهامًا في كلّ من وحدة تحكّم Firebase ومشروع Unity المفتوح (على سبيل المثال، يمكنك تنزيل ملفات إعدادات Firebase من وحدة التحكّم، ثم نقلها إلى مشروع Unity).

الوصول إلى الصف Firebase.Auth.FirebaseAuth

فئة FirebaseAuth هي بوابة لجميع طلبات البيانات من واجهة برمجة التطبيقات. ويمكن الوصول إليه من خلال FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

إنشاء حساب يستند إلى كلمة مرور

لإنشاء حساب مستخدم جديد باستخدام كلمة مرور، أكمِل الخطوات التالية في رمز تسجيل الدخول إلى تطبيقك:

  1. عندما يشترك مستخدم جديد باستخدام نموذج الاشتراك في تطبيقك، يجب إكمال أي خطوات جديدة لتأكيد صحة الحساب يتطلبها تطبيقك، مثل التأكّد من أنّه تمت كتابة كلمة مرور الحساب الجديد بشكل صحيح وتستوفي متطلبات الصعوبة التي لديك.
  2. أنشئ حسابًا جديدًا من خلال إرسال عنوان البريد الإلكتروني وكلمة المرور للمستخدم الجديد إلى FirebaseAuth.CreateUserWithEmailAndPassword:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

تسجيل دخول مستخدم باستخدام عنوان بريد إلكتروني وكلمة مرور

تشبه خطوات تسجيل دخول مستخدم باستخدام كلمة مرور خطوات إنشاء حساب جديد. في وظيفة تسجيل الدخول في تطبيقك، اتّبِع الخطوات التالية:

  1. عندما يسجّل مستخدم الدخول إلى تطبيقك، عليك إرسال عنوان البريد الإلكتروني للمستخدم وكلماته المرورية إلى FirebaseAuth.SignInWithEmailAndPassword:
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    
  2. يمكنك أيضًا إنشاء بيانات الاعتماد وتسجيل الدخول مثل سير العمل الأخرى:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

إجراء مقترَح: ضبط سياسة كلمة المرور

يمكنك تحسين أمان الحساب من خلال فرض متطلبات معيّنة على مدى تعقيد كلمة المرور.

لضبط سياسة كلمات المرور لمشروعك، افتح علامة التبويب سياسة كلمات المرور في صفحة "إعدادات المصادقة" في وحدة تحكّم Firebase:

إعدادات المصادقة

تتيح Firebase Authentication سياسات كلمة المرور متطلبات كلمة المرور التالية:

  • يجب إدخال حرف صغير.

  • يجب إدخال حرف كبير.

  • يجب إدخال حرف رقمي.

  • يجب إدخال حرف غير أبجدي رقمي.

    تستوفي الأحرف التالية شرط الأحرف غير الأبجدية الرقمية: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • الحد الأدنى لطول كلمة المرور (يتراوح من 6 إلى 30 حرفًا، والإعداد التلقائي هو 6)

  • الحد الأقصى لطول كلمة المرور (الحد الأقصى هو 4096 حرفًا)

يمكنك تفعيل فرض سياسة كلمات المرور بطريقتَين:

  • طلب: تفشل محاولات الاشتراك إلى أن يغيّر المستخدم كلمة المرور لتكون متوافقة مع سياستك.

  • الإشعار: يُسمح للمستخدمين بالاشتراك باستخدام كلمة مرور غير متوافقة. عند استخدام هذا الوضع، يجب التحقّق مما إذا كانت كلمة مرور المستخدم متوافقة مع السياسة من جهة العميل وطلب تعديل كلمة المرور من المستخدم بطريقة ما إذا لم تكن متوافقة.

على المستخدمين الجدد دائمًا اختيار كلمة مرور تمتثل لسياسة.

إذا كان لديك مستخدمون نشطون، ننصحك بعدم تفعيل ميزة "الترقية الإجبارية عند تسجيل الدخول" ما لم تكن تريد حظر وصول المستخدمين الذين لا تتوافق كلمات مرورهم مع سياستك. بدلاً من ذلك، استخدِم وضع الإشعارات الذي يسمح للمستخدمين بتسجيل الدخول باستخدام كلمات مرورهم الحالية وإعلامهم بالمتطلبات التي لا تستوفيها كلمة المرور.

إجراء مقترَح: تفعيل الحماية من إدراج عناوين البريد الإلكتروني

تُظهر بعض طرق Firebase Authentication التي تأخذ عناوين البريد الإلكتروني كمَعلمات أخطاء محدّدة إذا كان عنوان البريد الإلكتروني غير مسجَّل عندما يجب أن يكون مسجَّلاً (على سبيل المثال، عند تسجيل الدخول باستخدام عنوان بريد إلكتروني وكلمة مرور)، أو مسجَّلاً عندما يجب أن يكون غير مستخدَم (على سبيل المثال، عند تغيير عنوان البريد الإلكتروني الخاص بالمستخدم). على الرغم من أنّ ذلك قد يكون مفيدًا لاقتراح حلول محدّدة للمستخدمين، يمكن أن يتم أيضًا إساءة استخدامه من قِبل الجهات الضارّة لاكتشاف عناوين البريد الإلكتروني المسجّلة من قِبل مستخدميك.

للحدّ من هذا الخطر، ننصحك بتفعيل حماية تعداد البريد الإلكتروني لمشروعك باستخدام أداة gcloud في Google Cloud. يُرجى العِلم أنّ تفعيل هذه الميزة يؤدي إلى تغيير سلوك إعداد تقارير الأخطاء في Firebase Authentication: تأكَّد من أنّ تطبيقك لا يعتمد على الأخطاء الأكثر تحديدًا.

الخطوات التالية

بعد أن يسجِّل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد التي استخدمها المستخدم لتسجيل الدخول، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة. يتم تخزين هذا الحساب الجديد كجزء من مشروعك على Firebase، ويمكن استخدامه لتحديد هوية مستخدم في كل تطبيق في مشروعك، بغض النظر عن طريقة تسجيل دخول المستخدم.

  • في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من عنصر Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • في Firebase Realtime Database وCloud Storage قواعد الأمان، يمكنك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من متغيّر auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدة موفّري مصادقة من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدمحالٍ.

لتسجيل خروج مستخدم، اتصل بالرقم SignOut():

auth.SignOut();