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

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

قبل ان تبدأ

  1. أضف Firebase إلى مشروع C ++ الخاص بك .
  2. في وحدة تحكم Firebase ، افتح قسم المصادقة .
  3. في علامة التبويب طريقة تسجيل الدخول ، قم بتمكين موفر Yahoo .
  4. أضف معرّف العميل وسر العميل من وحدة تحكم مطوّري الموفر إلى تهيئة الموفر:
    1. لتسجيل عميل Yahoo OAuth ، اتبع وثائق مطور Yahoo مكتوب لتسجيل تطبيق ويب مع Yahoo .

      تأكد من تحديد أذنين OpenID Connect API: profile email .

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

قم بالوصول إلى firebase::auth::Auth class

فئة Auth هي البوابة لجميع استدعاءات API.
  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 class for your firebase::App . هناك تعيين واحد لواحد بين App Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

تعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK

للتعامل مع تدفق تسجيل الدخول باستخدام Firebase SDK ، اتبع الخطوات التالية:

  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 و range و state .

  3. اختياري : حدد نطاقات OAuth 2.0 إضافية بخلاف profile email الذي تريد طلبه من موفر المصادقة. إذا كان تطبيقك يتطلب الوصول إلى بيانات المستخدم الخاصة من Yahoo APIs ، فستحتاج إلى طلب أذونات لـ Yahoo APIs ضمن أذونات 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. بمجرد تكوين بيانات الموفر ، استخدمها لإنشاء FederatedOAuthProvider.

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

    لبدء تدفق تسجيل الدخول ، اتصل signInWithProvider :

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

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

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

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

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

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

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

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

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

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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 وقواعد أمان التخزين السحابي ، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.

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

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

auth->SignOut();