يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال موفّري OAuth مثل GitHub من خلال دمج تسجيل الدخول العام عبر OAuth في تطبيقك باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase لتنفيذ عملية تسجيل الدخول من البداية إلى النهاية.
قبل البدء
لتسجيل دخول المستخدمين باستخدام حسابات GitHub، عليك أولاً تفعيل GitHub كموفّر خدمة تسجيل دخول لمشروع Firebase:
استخدِم Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.
- في Xcode، افتح مشروع تطبيقك، ثم انتقِل إلى ملف > إضافة حِزم (File > Add Packages).
- عندما يُطلب منك ذلك، أضِف مستودع حزمة تطوير البرامج (SDK) لمنصات Apple في Firebase:
- اختَر مكتبة "Firebase Authentication".
- أضِف العلامة
-ObjCإلى قسم علامات الربط الأخرى (Other Linker Flags) في إعدادات إنشاء الهدف. - بعد الانتهاء، سيبدأ Xcode تلقائيًا في حلّ التبعيات وتنزيلها في الخلفية.
https://github.com/firebase/firebase-ios-sdk.git
بعد ذلك، نفِّذ بعض خطوات الضبط:
- في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.
- في علامة التبويب طريقة تسجيل الدخول، فعِّل موفِّر خدمة تسجيل الدخول GitHub.
-
أضِف معرّف العميل وسر العميل من وحدة تحكّم المطوّرين لدى الموفّر إلى إعدادات الموفّر:
- سجِّل تطبيقك كتطبيق مطوّر على GitHub واحصل على معرّف العميل وسر العميل الخاصَّين ببروتوكول OAuth 2.0 لتطبيقك.
-
تأكَّد من ضبط معرّف الموارد المنتظم (URI) لإعادة التوجيه عبر OAuth في Firebase (على سبيل المثال،
my-app-12345.firebaseapp.com/__/auth/handler) على أنّه عنوان URL لطلب معاودة الاتصال الخاص بالمصادقة في صفحة إعدادات تطبيقك في إعدادات تطبيق GitHub.
- انقر على حفظ.
التعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase
للتعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصات Apple من Firebase، اتّبِع الخطوات التالية:
أضِف مخطّطات عناوين URL المخصّصة إلى مشروع Xcode:
- افتح إعدادات مشروعك: انقر مرّتين على اسم المشروع في العرض التدرّجي للحساب على اليمين. اختَر تطبيقك من قسم الأهداف، ثم اختَر علامة التبويب المعلومات ووسِّع قسم أنواع عناوين URL.
-
انقر على الزر +، وأضِف معرّف التطبيق المرمّز كمخطّط عنوان URL.
اترك الحقول الأخرى فارغة.
يمكنك العثور على رقم تعريف التطبيق المشفَّر في وحدة تحكّم Firebase: انتقِل إلى
الإعدادات > علامة التبويب عام، ثم انتقِل للأسفل إلى قسم تطبيقاتك لعرض تفاصيل عن تطبيق iOS.عند الانتهاء، من المفترض أن يظهر ملف الإعدادات مشابهًا لما يلي (ولكن مع القيم الخاصة بتطبيقك):
أنشِئ مثيلاً من OAuthProvider باستخدام معرّف مقدّم الخدمة github.com.
Swift
var provider = OAuthProvider(providerID: "github.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
اختياري: حدِّد مَعلمات OAuth المخصّصة الإضافية التي تريد إرسالها مع طلب OAuth.
Swift
provider.customParameters = [ "allow_signup": "false" ]
Objective-C
[provider setCustomParameters:@{@"allow_signup": @"false"}];
للاطّلاع على المَعلمات التي يتيحها GitHub، يُرجى مراجعة مستندات GitHub OAuth. يُرجى العِلم أنّه لا يمكنك تمرير المَعلمات المطلوبة في Firebase باستخدام
setCustomParameters. هذه المَعلمات هي client_id وredirect_uri وresponse_type وscope وstate.اختياري: حدِّد نطاقات OAuth 2.0 إضافية غير الملف الشخصي الأساسي الذي تريد طلبه من موفّر المصادقة. إذا كان تطبيقك يتطلب الوصول إلى بيانات المستخدمين الخاصة من واجهات برمجة تطبيقات GitHub، عليك طلب أذونات للوصول إلى واجهات برمجة تطبيقات GitHub ضمن أذونات واجهة برمجة التطبيقات في وحدة تحكّم مطوّري GitHub. يجب أن تكون نطاقات OAuth المطلوبة مطابقة تمامًا للنطاقات التي تم ضبطها مسبقًا في أذونات واجهة برمجة التطبيقات الخاصة بالتطبيق.
Swift
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = ["user:email"]
Objective-C
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. [provider setScopes:@[@"user:email"]];
لمزيد من المعلومات، يُرجى الرجوع إلى مستندات نطاقات GitHub.
اختياري: إذا أردت تخصيص طريقة عرض تطبيقك لـ
SFSafariViewControllerأوUIWebViewعند عرض reCAPTCHA للمستخدم، أنشئ فئة مخصّصة تتوافق مع بروتوكولAuthUIDelegate، ومرِّرها إلىcredentialWithUIDelegate.المصادقة مع Firebase باستخدام عنصر موفّر OAuth
Swift
provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. guard let oauthCredential = authResult.credential as? OAuthCredential else { return } // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken } } }
Objective-C
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. FIROAuthCredential *oauthCredential = (FIROAuthCredential *)authResult.credential; // GitHub OAuth access token can also be retrieved by: // oauthCredential.accessToken // GitHub OAuth ID token can be retrieved by calling: // oauthCredential.idToken }]; } }];
باستخدام رمز الوصول OAuth، يمكنك طلب GitHub API.
على سبيل المثال، للحصول على معلومات الملف الشخصي الأساسية، يمكنك استدعاء REST API، وتمرير رمز الوصول في العنوان
Authorization:https://api.github.com/user
على الرغم من أنّ الأمثلة أعلاه تركّز على مسارات تسجيل الدخول، يمكنك أيضًا ربط موفّر GitHub بمستخدم حالي. على سبيل المثال، يمكنك ربط عدة موفّري خدمات بالمستخدم نفسه، ما يسمح له بتسجيل الدخول باستخدام أيّ منهم.
Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // GitHub OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // GitHub credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // GitHub OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
يمكن استخدام النمط نفسه مع
reauthenticateWithCredentialالذي يمكن استخدامه لاسترداد بيانات اعتماد جديدة للعمليات الحسّاسة التي تتطلّب تسجيل الدخول مؤخرًا.Swift
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // GitHub OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // GitHub OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken }];
الخطوات التالية
بعد أن يسجّل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد التي استخدمها لتسجيل الدخول، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase، ويمكن استخدامه لتحديد هوية المستخدم في كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل المستخدم الدخول.
-
في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من عنصر
User. يُرجى الاطّلاع على إدارة المستخدمين. في قواعد الأمان في Firebase Realtime Database وCloud Storage، يمكنك الحصول على رقم تعريف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغيّر
auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدة مقدّمي خدمات مصادقة من خلال ربط بيانات اعتماد مقدّم خدمة المصادقة بحساب مستخدم حالي.
لتسجيل خروج مستخدم، يمكنك استدعاء
signOut:.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
قد تحتاج أيضًا إلى إضافة رمز معالجة الأخطاء لمجموعة كاملة من أخطاء المصادقة. يُرجى الاطّلاع على معالجة الأخطاء.