Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

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

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

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

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

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

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

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

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

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

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

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

    מָהִיר

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

    מטרה-ג

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

    מָהִיר

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

    מטרה-ג

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

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

  4. אופציונלי : ציין טווחי OAuth 2.0 נוספים מעבר לפרופיל הבסיסי שברצונך לבקש מספק האימות. אם היישום שלך דורש גישה לנתוני משתמשים פרטיים מממשקי API של GitHub, יהיה עליך לבקש הרשאות לגישה לממשקי API של GitHub תחת הרשאות 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"]];
        

    למידע נוסף, עיין בתיעוד ה- Scope של GitHub .

  5. אופציונלי : אם ברצונך להתאים אישית את האופן שבו האפליקציה שלך מציגה את SFSafariViewController או UIWebView בעת הצגת ה- reCAPTCHA למשתמש, צור מחלקה מותאמת אישית שתואמת את פרוטוקול FIRAuthUIDelegate , getCredentialWithUIDelegate:completion: אותה כדי 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
            }
          }
        }
        

    מטרה-ג

        [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
        }
        

    מטרה-ג

        [[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
        }
        

    מטרה-ג

        [[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;
}

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