Google มุ่งมั่นที่จะพัฒนาความเท่าเทียมทางเชื้อชาติสำหรับชุมชนคนผิวดำ มาดูกันว่า
หน้านี้ได้รับการแปลโดย 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 Client ID และ ความลับลูกค้า
    2. ตรวจสอบให้แน่ใจว่า Firebase OAuth เปลี่ยนเส้นทาง URI (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) ของคุณ ได้รับการ ตั้งค่าเป็น URL การติดต่อกลับ ของการ อนุญาต ในหน้าการตั้งค่าแอพของคุณในการกำหนดค่า แอป GitHub
  5. คลิก บันทึก

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

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

  1. เพิ่มโครงร่าง URL ที่กำหนดเองให้กับโครงการ Xcode ของคุณ:

    1. เปิดการกำหนดค่าโครงการของคุณ: ดับเบิลคลิกที่ชื่อโครงการในมุมมองต้นไม้ด้านซ้าย เลือกแอปของคุณจากส่วนเป้าหมายจากนั้นเลือกแท็บข้อมูลและขยายส่วนประเภท URL
    2. คลิกปุ่ม + และเพิ่มรูปแบบ URL สำหรับรหัสลูกค้าที่กลับรายการของคุณ หากต้องการค้นหาค่านี้ให้เปิดไฟล์กำหนดค่า GoogleService-Info.plist แล้วมองหาคีย์ REVERSED_CLIENT_ID คัดลอกค่าของคีย์นั้นและวางลงในกล่อง Schemes URL ในหน้าการกำหนดค่า เว้นฟิลด์อื่นว่างไว้

      เมื่อเสร็จสิ้นการกำหนดค่าของคุณควรมีลักษณะคล้ายกับต่อไปนี้ (แต่ด้วยค่าเฉพาะแอปพลิเคชันของคุณ)

  2. สร้างอินสแตนซ์ของ OAuthProvider โดยใช้ ID ผู้ให้บริการ 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 ให้ดู เอกสารประกอบ ของ GitHub OAuth โปรดทราบว่าคุณไม่สามารถส่งผ่านพารามิเตอร์ที่จำเป็นสำหรับ Firebase ด้วย setCustomParameters พารามิเตอร์เหล่านี้คือ client_id , redirect_uri , response_type , ขอบเขต และ สถานะ

  4. ทางเลือก : ระบุขอบเขต OAuth 2.0 เพิ่มเติมนอกเหนือจากโปรไฟล์พื้นฐานที่คุณต้องการร้องขอจากผู้ให้บริการการตรวจสอบสิทธิ์ หากแอปพลิเคชันของคุณต้องการเข้าถึงข้อมูลผู้ใช้ส่วนตัวจาก GitHub API คุณจะต้องขอสิทธิ์ในการเข้าถึง GitHub API ภายใต้ สิทธิ์ 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"]
        

    Objective-C

        // 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.
              // 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

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

    การใช้โทเค็นการเข้าถึง OAuth คุณสามารถเรียก GitHub API

    ตัวอย่างเช่นหากต้องการรับข้อมูลโปรไฟล์พื้นฐานคุณสามารถโทรหา REST API ผ่านโทเค็นการเข้าถึงในส่วนหัวการ 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 Realtime และ Cloud Storage Security คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้

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

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

รวดเร็ว

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

Objective-C

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

คุณอาจต้องการเพิ่มรหัสการจัดการข้อผิดพลาดสำหรับข้อผิดพลาดการรับรองความถูกต้องแบบเต็มรูปแบบ ดู จัดการข้อผิดพลาด