אמת באמצעות GitHub ב- iOS

תוכל לאפשר למשתמשים שלך לאמת עם Firebase באמצעות ספקי OAuth כגון GitHub על ידי שילוב התחברות OAuth כללית באפליקציה שלך באמצעות SDK Firebase לביצוע זרימת הכניסה מקצה לקצה.

לפני שאתה מתחיל

כדי להיכנס למשתמשים באמצעות חשבונות GitHub, תחילה עליך להפעיל את GitHub כספק כניסה לפרויקט Firebase שלך:

  1. להוסיף Firebase לפרויקט iOS שלך .

  2. כלול את התרמילים הבאים שלך Podfile :

    pod 'Firebase/Auth'
    
  3. בשנות ה קונסולת Firebase , פתח את הקטע המחבר.
  4. 'הכניסה דרך כרטיסיית שיטה, לאפשר ספק GitHub.
  5. מוסיפים את זיהוי הלקוח וגם לקוח הסוד מזה קונסולת המפתחים של ספק לתצורת ספק:
    1. רשמו את האפליקציה שלכם כיישום מפתח על GitHub ולקבל מזהה לקוח OAuth 2.0 של האפליקציה לקוח הסוד.
    2. ודא שלך Firebase OAuth הפניה URI (למשל my-app-12345.firebaseapp.com/__/auth/handler ) מוגדר ככתובת אתר התקשרות להרשאה שלך בדף ההגדרות של האפליקציה שלך על שלך config של GitHub האפליקציה .
  6. לחץ על שמור.

לטפל בזרימת הכניסה באמצעות SDK Firebase

כדי לטפל בזרימת הכניסה באמצעות Firebase iOS SDK, בצע את השלבים הבאים:

  1. הוסף תוכניות URL מותאמות אישית לפרויקט Xcode שלך:

    1. פתח את תצורת הפרויקט שלך: לחץ פעמיים על שם הפרויקט בתצוגת העץ השמאלית. בחר ביישום מהמדור הממקד, ולאחר מכן בחר את כרטיסיית המידע, וכן להרחיב את מקטע סוגי URL.
    2. לחץ על הלחצן +, ולהוסיף ערכת URL עבור זיהוי הלקוח הפוך שלך. כדי למצוא את הערך הזה, לפתוח את GoogleService-Info.plist קובץ תצורה, ולחפש את REVERSED_CLIENT_ID המפתח. העתק את הערך של המפתח, ולהדביק אותו בשדה כתובת האתר הקמעונות בדף התצורה. השאר את השדות האחרים ריקים.

      בסיום, התצורה שלך אמורה להיראות דומה לדברים הבאים (אך עם הערכים הספציפיים ליישום שלך):

  2. יצירת מופע של OAuthProvider באמצעות מזהה ספק github.com.

    מָהִיר

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

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
        
  3. אופציונאלי: ציין פרמטרי OAuth מנהג נוספים שאתה רוצה לשלוח עם בקשת OAuth.

    מָהִיר

        provider.customParameters = [
          "allow_signup": "false"
        ]
        

    Objective-C

        [provider setCustomParameters:@{@"allow_signup": @"false"}];
        

    עבור הפרמטרים GitHub תומך, לראות את התיעוד OAuth GitHub . שים לב, אתה לא יכול להעביר פרמטרים-נדרש Firebase עם setCustomParameters . פרמטרים אלה הם client_id, redirect_uri, response_type, היקף ומדינה.

  4. אופציונלי: ציין OAuth נוסף 2.0 היקפים מעבר לפרופיל בסיסי שברצונך בקשה מספקת אימות. אם היישום שלך דורש גישה לנתוני המשתמשים פרטיים GitHub APIs, תצטרך הרשאות בקשה גישה GitHub APIs תחת הרשאות API במסוף המפתחים GitHub. היקפי OAuth המבוקשים חייבים להיות בהתאמה מדויקת לאלה שהוגדרו מראש בהרשאות ה- API של האפליקציה.

    מָהִיר

        // Request read access to a user's email addresses.
        // This must be preconfigured in the app's API permissions.
        provider.scopes = ["user:email"]
        

    אובייקטיבי-ג

        // Request read access to a user's email addresses.
        // This must be preconfigured in the app's API permissions.
        [provider setScopes:@[@"user:email"]];
        

    כדי ללמוד עוד, עיין בתיעוד היקפי GitHub .

  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.
    
              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, אתה יכול להתקשר API GitHub .

    לדוגמה, כדי לקבל את פרטי הפרופיל הבסיסיים, אתה יכול לקרוא לממשק API REST, להעביר את קוד הגישה את Authorization הכותרת:

    https://api.github.com/user
    
  7. בעוד שהדוגמאות שלעיל מתמקדות בזרימות כניסה, יש לך גם את היכולת לקשר ספק GitHub למשתמש קיים. לדוגמה, אתה יכול לקשר מספר ספקים לאותו משתמש ומאפשר להם להיכנס עם כל אחד מהם.

    מָהִיר

        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.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.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:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }];
        
  8. אותו הדפוס יכול לשמש עם reauthenticateWithCredential אשר ניתן להשתמש בם כדי לאחזר אישורים טריים עבור פעולות רגישות הדורשות לאחרונה התחברות.

    מָהִיר

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

הצעדים הבאים

לאחר שמשתמש נכנס לראשונה, חשבון משתמש חדש נוצר ומקושר לאישורים - כלומר שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות - המשתמש נכנס איתו. חשבון חדש זה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט שלך, ללא קשר לאופן בו המשתמש נכנס.

  • באפליקציות שלך, אתה יכול לקבל את המידע הבסיסי של הפרופיל האישי של המשתמש מן FIRUser האובייקט. ראו ניהול משתמשים .

  • בבסיס הנתונים בזמן אמת Firebase שלך לאחסון בענן אבטחה חוקי , אתה יכול לקבל את שנכנסים למערכת זיהוי המשתמש הייחודי של המשתמש מן auth משתנה, ולהשתמש בו כדי לקבוע אילו נתונים גישה יכול משתמש.

תוכל לאפשר למשתמשים להיכנס לאפליקציה שלך דרך ספקי אימות מרובים על ידי מקשר 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;
}

ייתכן שתרצה גם להוסיף קוד טיפול בשגיאות לטווח המלא של טעויות האימות. ראה שגיאות ידית .