يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال موفّري OAuth، مثل Microsoft Azure Active Directory، عن طريق دمج تسجيل الدخول العام المستند إلى الويب باستخدام بروتوكول OAuth في تطبيقك باستخدام حزمة Firebase SDK لتنفيذ عملية تسجيل الدخول من البداية إلى النهاية. بما أنّ هذه العملية تتطلّب استخدام حِزم Firebase SDK المستندة إلى الهاتف، فهي متوافقة فقط مع منصّتَي Android وApple.
قبل البدء
- أضِف Firebase إلى مشروعك بلغة C++.
- في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.
- في علامة التبويب طريقة تسجيل الدخول ، فعِّل موفّر تسجيل الدخول Microsoft.
-
أضِف معرّف العميل وسر العميل من وحدة تحكّم المطوّرين التابعة لموفّر الخدمة إلى إعدادات الموفّر:
- لتسجيل عميل OAuth من Microsoft، اتّبِع التعليمات الواردة في مقالة التشغيل السريع: تسجيل تطبيق باستخدام نقطة النهاية Azure Active Directory v2.0. يُرجى العِلم أنّ نقطة النهاية هذه تتيح تسجيل الدخول باستخدام حسابات Microsoft الشخصية وحسابات Azure Active Directory. مزيد من المعلومات عن Azure Active Directory v2.0.
-
عند تسجيل التطبيقات باستخدام موفّري الخدمة هؤلاء، احرص على تسجيل النطاق
*.firebaseapp.comلمشروعك كنطاق إعادة التوجيه لتطبيقك.
- انقر على حفظ.
الوصول إلى الفئة firebase::auth::Auth
الفئة Auth هي بوابة جميع طلبات البيانات من واجهة برمجة التطبيقات.
- أضِف ملفَي رأس Auth وApp:
#include "firebase/app.h" #include "firebase/auth.h"
- في رمز الإعداد، أنشِئ فئة
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__)
- احصل على الفئة
firebase::auth::Authلـfirebase::App. هناك علاقة فردية بينAppوAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
التعامل مع عملية تسجيل الدخول باستخدام حزمة Firebase SDK
للتعامل مع عملية تسجيل الدخول باستخدام حزمة Firebase SDK، اتّبِع الخطوات التالية:
أنشِئ مثيلاً من
FederatedOAuthProviderDataتم إعداده باستخدام رقم تعريف الموفّر المناسب لـ Microsoft.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);اختياري: حدِّد مَعلمات OAuth المخصّصة الإضافية التي تريد إرسالها مع طلب OAuth.
// Prompt user to re-authenticate to Microsoft. provider_data.custom_parameters["prompt"] = "login"; // Target specific email with login hint. provider_data.custom_parameters["login_hint"] = "user@firstadd.onmicrosoft.com";للاطّلاع على المَعلمات التي تتيحها Microsoft، يُرجى الرجوع إلى مستندات Microsoft OAuth. يُرجى العِلم أنّه لا يمكنك تمرير المَعلمات المطلوبة من Firebase باستخدام
setCustomParameters(). هذه المَعلمات هي client_id، response_type، redirect_uri، state، scope و response_mode.للسماح للمستخدمين من مستأجر معيّن في Azure AD فقط بتسجيل الدخول إلى التطبيق، يمكن استخدام اسم النطاق المألوف لمستأجر Azure AD أو المعرِّف الفريد العالمي (GUID) للمستأجر. يمكن إجراء ذلك عن طريق تحديد الحقل "tenant" في عنصر المَعلمات المخصّصة.
// Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". provider_data.custom_parameters["tenant"] ="TENANT_ID";اختياري: حدِّد نطاقات OAuth 2.0 الإضافية التي تريد طلبها من موفّر المصادقة، بالإضافة إلى الملف الشخصي الأساسي.
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");لمزيد من المعلومات، يُرجى الرجوع إلى مستندات الأذونات والموافقة من Microsoft.
بعد إعداد بيانات الموفّر، استخدِمها لإنشاء
FederatedOAuthProvider.// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);صادِق باستخدام Firebase من خلال عنصر موفّر المصادقة. يُرجى العِلم أنّه على عكس عمليات FirebaseAuth الأخرى، سيتحكّم هذا الإجراء في واجهة المستخدم من خلال عرض طريقة عرض ويب يمكن للمستخدم من خلالها إدخال بيانات الاعتماد.
لبدء عملية تسجيل الدخول، استخدِم
SignInWithProvider:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);يمكن لتطبيقك الانتظار أو تسجيل ردّ الاتصال في Future.
باستخدام رمز الدخول إلى OAuth، يمكنك استدعاء Microsoft Graph API.
في حين أنّ الأمثلة أعلاه تركّز على عمليات تسجيل الدخول، يمكنك أيضًا ربط موفّر Microsoft Azure Active Directory بمستخدم حالي باستخدام
LinkWithProvider. على سبيل المثال، يمكنك ربط عدّة موفّري خدمة بالمستخدم نفسه، ما يسمح له بتسجيل الدخول باستخدام أيّ منهم.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);يمكن استخدام النمط نفسه مع
ReauthenticateWithProviderالذي يمكن استخدامه لاسترداد بيانات اعتماد جديدة للعمليات الحسّاسة التي تتطلّب تسجيل دخول حديثًا.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);يمكن لتطبيقك الانتظار أو تسجيل ردّ الاتصال في Future.
الخطوات التالية
بعد أن يُسجِّل المستخدم الدخول للمرة الأولى، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات موفّر المصادقة التي سجّل المستخدم الدخول بها. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase، ويمكن استخدامه لتحديد هوية المستخدم في كل تطبيق في مشروعك، بغض النظر عن طريقة تسجيل الدخول.
-
في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من الـ
firebase::auth::Userobject: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();