المصادقة باستخدام Yahoo وC++

يمكنك السماح للمستخدمين بالمصادقة من خلال Firebase باستخدام موفّري OAuth مثل Yahoo من خلال دمج تسجيل الدخول عبر OAuth العام المستند إلى الويب في تطبيقك باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase لتنفيذ عملية تسجيل الدخول من البداية إلى النهاية نظرًا لأن هذا التدفق يتطلب استخدام حِزم تطوير البرامج (SDK) لمنصة Firebase المستندة إلى الهاتف، فلا تتوافق إلا مع نظامَي التشغيل Android ومنصات Apple.

قبل البدء

  1. أضف Firebase إلى مشروع C++.
  2. في وحدة تحكُّم Firebase، افتح قسم المصادقة.
  3. في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر الخدمة Yahoo.
  4. أضِف Client-ID (معرّف العميل) وClient Secret (سر العميل) من وحدة تحكّم المطوّرين لدى هذا الموفّر إلى إعداد موفِّر الخدمة:
    1. لتسجيل عميل Yahoo OAuth، اتبع الخطوات الخاصة بمطوّر برامج Yahoo مستندات عن تسجيل تطبيق ويب في Yahoo.

      تأكّد من اختيار إذنَي OpenID Connect API: "profile" وemail"

    2. عند تسجيل التطبيقات لدى مقدّمي الخدمات هؤلاء، يُرجى التأكّد من تسجيل نطاق *.firebaseapp.com لمشروعك كنطاق إعادة التوجيه التطبيق.
  5. انقر على حفظ.

الوصول إلى الصف firebase::auth::Auth

الفئة 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);
    

معالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase

لمعالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase، اتّبِع الخطوات التالية:

  1. إنشاء مثيل لـ FederatedOAuthProviderData تم ضبطه باستخدام معرف المزود المناسب لـ Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. اختياري: تحديد مَعلمات OAuth المخصَّصة الإضافية التي تريد الإرسال باستخدام طلب OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    

    بالنسبة إلى المعلمات التي تدعمها Yahoo، راجع مستندات Yahoo OAuth. تجدر الإشارة إلى أنّه لا يمكنك تمرير المَعلمات المطلوبة في Firebase مع custom_parameters() هذه المَعلمات هي client_id redirect_uri وresponse_type وscope وstate.

  3. اختياري: يمكنك تحديد نطاقات OAuth 2.0 الإضافية التي تتجاوز profile email الذي تريد طلبه من مزوِّد المصادقة. إذا كان الوصول إلى بيانات المستخدم الخاصة من واجهات برمجة تطبيقات Yahoo، فيجب طلب أذونات لواجهات برمجة تطبيقات Yahoo API ضمن أذونات واجهة برمجة التطبيقات في وحدة تحكّم المطوّرين في Yahoo. يجب أن تتطابق نطاقات OAuth المطلوبة تمامًا مع الإعدادات مسبقًا في أذونات واجهة برمجة التطبيقات الخاصة بالتطبيق. على سبيل المثال، إذا كانت قراءة/كتابة يتم طلب الوصول إلى جهات اتصال المستخدم ويتم ضبطه مسبقًا في واجهة برمجة التطبيقات الخاصة بالتطبيق يجب تمرير sdct-w بدلاً من نطاق OAuth للقراءة فقط sdct-r وإلا، فسيفشل التدفق وسيظهر خطأ في المستخدم النهائي.

    // Request access to Yahoo Mail API.
    provider_data.scopes.push_back("mail-r");
    // This must be preconfigured in the app's API permissions.
    provider_data.scopes.push_back("sdct-w");
    

    لمزيد من المعلومات، يُرجى الرجوع إلى مستندات نطاقات Yahoo.

  4. بعد ضبط بيانات مزوِّد الخدمة، يمكنك استخدامها لإنشاء OAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. يمكنك المصادقة مع Firebase باستخدام عنصر موفّر المصادقة. لاحظ أنه على عكس عمليات FirebaseAuth الأخرى، سيتحكم هذا في واجهة المستخدم من خلال فرقعة عرض ويب يمكن للمستخدم من خلاله إدخال بيانات الاعتماد.

    لبدء عملية تسجيل الدخول، يمكنك الاتصال بالرقم SignInWithProvider:

    firebase::Future<firebase::auth::AuthResult> result =
      auth->SignInWithProvider(provider_data);
    

    قد ينتظر طلبك بعد ذلك أو تسجيل طلب معاودة الاتصال في المستقبل

  6. بينما تركز الأمثلة أعلاه على تدفقات تسجيل الدخول، لديك أيضًا القدرة على ربط موفر Yahoo بمستخدم حالي باستخدام LinkWithProvider على سبيل المثال، يمكنك ربط عدة مواقع مقدمي الخدمة للمستخدم نفسه مما يسمح لهم بتسجيل الدخول باستخدام أي منهما.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. يمكن استخدام النمط نفسه مع ReauthenticateWithProvider الذي يمكن تُستخدم لاسترداد بيانات اعتماد جديدة للعمليات الحساسة التي تتطلب تسجيل دخول حديث.

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    قد ينتظر تطبيقك بعد ذلك أو يسجّل معاودة الاتصال على المستقبل.

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

بعد تسجيل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد المرتبطة ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور، أو الرقم أو معلومات مقدم المصادقة - المستخدم الذي سجّل الدخول باستخدامه. هذا الجديد كجزء من مشروع 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();