المصادقة مع Firebase باستخدام نظام مصادقة مخصص وC++

يمكنك دمج Firebase Authentication مع نظام مصادقة مخصّص من خلال تعديل خادم المصادقة لإنتاج رموز مميّزة موقَّعة ومخصّصة عندما يختار المستخدم بنجاح. يتلقّى تطبيقك هذا الرمز المميّز ويستخدمه للمصادقة. من خلال Firebase.

قبل البدء

  1. إضافة Firebase إلى C++ مشروعك.
  2. احصل على مفاتيح خادم مشروعك:
    1. انتقِل إلى حسابات الخدمة. المستخدم في إعدادات مشروعك.
    2. انقر على إنشاء مفتاح خاص جديد في أسفل قسم SDK لمشرف Firebase في صفحة حسابات الخدمة.
    3. يتم تلقائيًا استخدام مفتاحَي التشفير العام/الخاص لحساب الخدمة الجديد. تم حفظها على جهاز الكمبيوتر. انسخ هذا الملف إلى خادم المصادقة.

المصادقة باستخدام Firebase

الفئة Auth هي مدخل جميع طلبات البيانات من واجهة برمجة التطبيقات.
  1. إضافة ملفات رؤوس التطبيقات والمصادقة:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. في رمز الإعداد، أنشئ صف واحد (firebase::App).
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. الحصول على الصف firebase::auth::Auth لـ firebase::App هناك ربط واحد لواحد بين App وAuth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
يمكنك الاتصال بالرقم Auth::SignInWithCustomToken باستخدام الرمز المميّز من خادم المصادقة.
  1. عندما يسجّل المستخدمون الدخول إلى تطبيقك، أرسِل بيانات اعتماد تسجيل الدخول (ل على سبيل المثال، اسم المستخدم وكلمة المرور) إلى خادم المصادقة. الخادم بالتحقق من بيانات الاعتماد ويعرض رمز مميّز مخصّص إذا كانت صالحة.
  2. بعد تلقّي الرمز المميّز المخصّص من خادم المصادقة، عليك اجتياز إلى Auth::SignInWithCustomToken لتسجيل دخول المستخدم:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. إذا كان برنامجك يحتوي على حلقة تحديث تعمل بانتظام (مثلاً عند معدل 30 أو 60 ثانية) مرة في الثانية)، يمكنك الاطلاع على النتائج مرة واحدة لكل تحديث باستخدام Auth::SignInWithCustomTokenLastResult:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    أو إذا كان برنامجك يستند إلى أحداث، قد تفضّل تسجيل معاودة الاتصال على المستقبل:

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

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

  • في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من كائن firebase::auth::User:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // 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 firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
    
  • في Firebase Realtime Database وCloud Storage قواعد الأمان، تتيح لك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغير auth، واستخدامها للتحكم في البيانات التي يمكن للمستخدم الوصول إليها

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

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

auth->SignOut();