Check out what’s new from Firebase at Google I/O 2022. Learn more

אימות באמצעות GitHub באנדרואיד

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

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

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

  1. אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך .

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

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    באמצעות Firebase Android BoM , האפליקציה שלך תמיד תשתמש בגרסאות תואמות של ספריות Firebase Android.

    (אלטרנטיבי) הכרזה על תלות בספריית Firebase מבלי להשתמש ב-BoM

    אם תבחר לא להשתמש ב-Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

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

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.0.5'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    באמצעות Firebase Android BoM , האפליקציה שלך תמיד תשתמש בגרסאות תואמות של ספריות Firebase Android.

    (אלטרנטיבי) הכרזה על תלות בספריית Firebase מבלי להשתמש ב-BoM

    אם תבחר לא להשתמש ב-Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

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

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.0.5'
    }
    

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

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

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

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

  1. בנו מופע של OAuthProvider באמצעות ה- Builder שלו עם מזהה הספק github.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
    
  2. אופציונלי : ציין פרמטרים נוספים של OAuth מותאמים אישית שברצונך לשלוח עם בקשת ה-OAuth.

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com");
    

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

  3. אופציונלי : ציין היקפי OAuth 2.0 נוספים מעבר לפרופיל הבסיסי שברצונך לבקש מספק האימות. אם האפליקציה שלך דורשת גישה לנתוני משתמש פרטיים ממשקי GitHub API, תצטרך לבקש הרשאות לגשת אל 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.
    List<String> scopes =
        new ArrayList<String>() {
          {
            add("user:email");
          }
        };
    provider.setScopes(scopes);
    
  4. בצע אימות עם Firebase באמצעות אובייקט ספק OAuth. שים לב שבניגוד לפעולות אחרות של FirebaseAuth, זה ישתלט על ממשק המשתמש שלך על ידי פתיחת כרטיסיית Chrome מותאמת אישית . כתוצאה מכך, אל תתייחס לפעילות שלך ב- OnSuccessListener וב- OnFailureListener שאתה מצרף מכיוון שהם יתנתקו מיד כשהפעולה תתחיל את ממשק המשתמש.

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

    כדי לבדוק אם יש תוצאה ממתינה, התקשר getPendingAuthResult :

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    כדי להתחיל את זרימת הכניסה, התקשר startActivityForSignInWithProvider :

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

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

    באמצעות אסימון הגישה של OAuth, אתה יכול לקרוא ל- GitHub API .

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

  5. בעוד שהדוגמאות לעיל מתמקדות בזרימות כניסה, יש לך גם את היכולת לקשר ספק GitHub למשתמש קיים באמצעות startActivityForLinkWithProvider . לדוגמה, אתה יכול לקשר מספר ספקים לאותו משתמש ולאפשר להם להיכנס עם אחד מהם.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // GitHub credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. ניתן להשתמש באותה דפוס עם startActivityForReauthenticateWithProvider אשר ניתן להשתמש בו כדי לאחזר אישורים טריים עבור פעולות רגישות הדורשות כניסה אחרונה.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

הצעדים הבאים

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

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

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

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

כדי לצאת ממשתמש, התקשר signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()