المصادقة باستخدام Yahoo على iOS

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

قبل ان تبدأ

لتسجيل دخول المستخدمين باستخدام حسابات Yahoo ، يجب أولاً تمكين Yahoo كموفر تسجيل دخول لمشروع Firebase الخاص بك:

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

      تأكد من تحديد أذونات API رض الاتصال هما: profile و email .

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

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

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

  1. أضف مخططات URL مخصصة إلى مشروع Xcode الخاص بك:

    1. افتح تكوين المشروع الخاص بك: انقر نقرًا مزدوجًا فوق اسم المشروع في عرض الشجرة الأيسر. حدد التطبيق من قسم الأهداف، ثم حدد علامة التبويب معلومات، وتوسيع القسم أنواع URL.
    2. انقر على زر وإضافة نظام URL لمعرف العميل عكس الخاص بك. العثور على هذه القيمة، فتح GoogleService-Info.plist ملف التكوين، ونظرة لل REVERSED_CLIENT_ID مفتاح. نسخ قيمة هذا المفتاح، ولصقه في مربع URL مخططات في صفحة التكوين. اترك الحقول الأخرى فارغة.

      عند الانتهاء ، يجب أن يبدو التكوين الخاص بك مشابهًا لما يلي (ولكن مع القيم الخاصة بالتطبيق):

  2. إنشاء مثيل OAuthProvider باستخدام ID مزود yahoo.com.

    سويفت

    var provider = OAuthProvider(providerID: "yahoo.com")
        

    ج موضوعية

    FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"yahoo.com"];
        
  3. اختياري: حدد معلمات إضافية أوث المخصصة التي تريد إرسالها مع طلب أوث.

    سويفت

    provider.customParameters = [
    "prompt": "login",
    "language": "fr"
    ]
        

    ج موضوعية

    [provider setCustomParameters:@{@"prompt": @"login", @"language": @"fr"}];
        

    لدعم المعلمات ياهو، راجع وثائق ياهو أوث . ملاحظة أنه لا يمكنك تمرير المعلمات المطلوبة Firebase مع setCustomParameters . هذه المعلمات CLIENT_ID، redirect_uri، RESPONSE_TYPE ونطاقها والدولة.

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

    سويفت

    // Request access to Yahoo Mail API.
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    provider.scopes = ["mail-r", "sdct-w"]
        

    ج موضوعية

    // Request access to Yahoo Mail API.
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    [provider setScopes:@[@"mail-r", @"sdct-w"]];
        

    لمعرفة المزيد، يرجى الرجوع إلى وثائق ياهو نطاقات .

  5. اختياري: إذا كنت ترغب في تخصيص الطريقة يعرض التطبيق الخاص بك SFSafariViewController أو UIWebView عند عرض اختبار reCAPTCHA للمستخدم، وخلق فئة مخصصة الذي يتوافق مع FIRAuthUIDelegate البروتوكول، وتمريرها إلى getCredentialWithUIDelegate:completion: .

  6. مصادقة مع Firebase باستخدام كائن موفر OAuth.

    سويفت

    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.
      // Yahoo OAuth access token can also be retrieved by:
      // authResult.credential.accessToken
      // Yahoo OAuth ID token can be retrieved by calling:
      // authResult.credential.idToken
    }
    }
    }
        

    ج موضوعية

    [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.
      // Yahoo OAuth access token can also be retrieved by:
      // authResult.credential.accessToken
      // Yahoo OAuth ID token can be retrieved by calling:
      // authResult.credential.idToken
    }];
    }
    }];
        

    باستخدام رمز وصول أوث، يمكنك استدعاء API ياهو .

    على سبيل المثال، للحصول على المعلومات الشخصية الأساسية، يمكنك استدعاء API REST، ويمر وصول رمزية في Authorization الرأس:

    https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
    

    حيث YAHOO_USER_UID غير معرف المستخدم ياهو التي يمكن استردادها من Auth.auth.currentUser.providerData[0].uid الحقل أو من authResult.additionalUserInfo.profile .

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

    سويفت

    Auth().currentUser.link(withCredential: credential) { authResult, error in
    if error != nil {
    // Handle error.
    }
    // Yahoo credential is linked to the current user.
    // IdP data available in authResult.additionalUserInfo.profile.
    // Yahoo OAuth access token can also be retrieved by:
    // authResult.credential.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }
        

    ج موضوعية

    [[FIRAuth auth].currentUser
    linkWithCredential:credential
            completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
    if (error) {
    // Handle error.
    }
    // Yahoo credential is linked to the current user.
    // IdP data available in authResult.additionalUserInfo.profile.
    // Yahoo OAuth access token is can also be retrieved by:
    // authResult.credential.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }];
        
  8. على نفس النمط يمكن استخدامها مع reauthenticateWithPopup / reauthenticateWithRedirect والتي يمكن استخدامها لاسترداد أوراق اعتماد جديدة لعمليات الحساسة التي تتطلب تسجيل الدخول مؤخرا.

    سويفت

    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.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }
        

    ج موضوعية

    [[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:
    // authResult.credential.accessToken
    // Yahoo OAuth ID token can be retrieved by calling:
    // authResult.credential.idToken
    }];
        

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

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

  • في التطبيقات الخاصة بك، يمكنك الحصول على المعلومات الشخصية الأساسية للمستخدم من FIRUser الكائن. انظر إدارة المستخدمين .

  • في قاعدة البيانات الخاصة بك Firebase الحقيقي وسحابة التخزين قواعد الأمن ، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

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

تسجيل الخروج مستخدم، استدعاء signOut: .

سويفت

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

ج موضوعية

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

قد ترغب أيضًا في إضافة رمز معالجة الأخطاء للنطاق الكامل من أخطاء المصادقة. نرى أخطاء مقبض .