Catch up on everthing we announced at this year's Firebase Summit. Learn more

ตรวจสอบสิทธิ์โดยใช้ GitHub บน Android

คุณอนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้บัญชี GitHub ได้โดยผสานการเข้าสู่ระบบ OAuth ทั่วไปบนเว็บในแอปของคุณโดยใช้ Firebase SDK เพื่อดำเนินการขั้นตอนการลงชื่อเข้าใช้ตั้งแต่ต้นจนจบ

ก่อนจะเริ่ม

ในการลงชื่อเข้าใช้ผู้ใช้โดยใช้บัญชี GitHub คุณต้องเปิดใช้ GitHub เป็นผู้ให้บริการลงชื่อเข้าใช้สำหรับโปรเจ็กต์ Firebase ของคุณก่อน:

  1. หากคุณยังไม่ได้ เพิ่ม Firebase กับโครงการ Android ของคุณ

  2. ใน Firebase คอนโซล , เปิดส่วนการตรวจสอบสิทธิ์
  3. ที่ลงในแท็บวิธีการที่ช่วยให้ผู้ให้บริการ GitHub
  4. เพิ่มรหัสลูกค้าและความลับของไคลเอ็นต์จากผู้ให้บริการที่นักพัฒนาคอนโซลการกำหนดค่าของผู้ให้บริการ:
    1. ลงทะเบียนแอปของคุณ เป็นโปรแกรมสำหรับนักพัฒนาบน GitHub และได้รับรหัสลูกค้าของแอป OAuth 2.0 และความลับของไคลเอ็นต์
    2. ตรวจสอบให้แน่ใจคุณ Firebase OAuth เปลี่ยนเส้นทาง URI (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) ถูกกำหนดให้เป็น URL เรียกกลับการอนุญาตของคุณในแอปหน้าการตั้งค่าบน การตั้งค่า GitHub ของแอป
  5. คลิกบันทึก
  6. ใช้ Firebase Android BoM ประกาศพึ่งพาสำหรับห้องสมุด Firebase รับรองความถูกต้องของ Android ในโมดูลของคุณ (app ระดับ) ไฟล์ Gradle (ปกติ app/build.gradle )

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.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.1'
    }
    

    คอตลิน+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.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.1'
    }
    

  7. หากคุณยังไม่ได้ระบุของแอป SHA-1 ลายนิ้วมือทำจาก หน้าการตั้งค่า ของคอนโซล Firebase อ้างถึง การตรวจสอบสิทธิ์ลูกค้าของ สำหรับรายละเอียดเกี่ยวกับวิธีการที่จะได้รับของแอป SHA-1 ลายนิ้วมือ

จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK

หากคุณกำลังสร้างแอป Android วิธีที่ง่ายที่สุดในการตรวจสอบสิทธิ์ผู้ใช้ของคุณด้วย Firebase โดยใช้บัญชี GitHub คือการจัดการขั้นตอนการลงชื่อเข้าใช้ทั้งหมดด้วย Firebase Android SDK

ในการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase Android SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างตัวอย่างของ OAuthProvider ใช้สร้างด้วยรหัสผู้ให้บริการ 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 รัฐขอบเขตและ 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 นี้จะใช้การควบคุมของคุณ UI โดย popping ขึ้น แท็บ Chrome ที่กำหนดเอง เป็นผลให้ไม่อ้างอิงกิจกรรมใน OnSuccessListener และ OnFailureListener ที่คุณแนบที่พวกเขาทันทีจะถอดออกเมื่อการดำเนินการเริ่มต้นของ UI

    คุณควรตรวจสอบก่อนว่าคุณได้รับคำตอบแล้วหรือไม่ การลงชื่อเข้าใช้ด้วยวิธีนี้จะทำให้กิจกรรมของคุณอยู่ในพื้นหลัง ซึ่งหมายความว่าระบบสามารถเรียกคืนข้อมูลนี้ได้ในระหว่างการลงชื่อเข้าใช้ เพื่อให้แน่ใจว่าคุณจะไม่ให้ผู้ใช้ลองอีกครั้งหากเกิดเหตุการณ์นี้ขึ้น คุณควรตรวจสอบว่ามีผลลัพธ์อยู่แล้วหรือไม่

    เพื่อตรวจสอบว่ามีผลอยู่ระหว่างดำเนินการเรียก 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 เรียลไทม์และการจัดเก็บเมฆ กฎการรักษาความปลอดภัย , คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

คุณสามารถอนุญาตให้ผู้ใช้สามารถลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการการตรวจสอบหลายคนโดย การเชื่อมโยงข้อมูลประจำตัวของผู้ให้บริการรับรองความถูกต้องไปยังบัญชีผู้ใช้ที่มีอยู่

ออกจากระบบผู้ใช้โทร signOut :

Java

FirebaseAuth.getInstance().signOut();

คอตลิน+KTX

Firebase.auth.signOut()