Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Otentikasi Menggunakan GitHub di Platform Apple

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Anda dapat mengizinkan pengguna Anda mengautentikasi dengan Firebase menggunakan penyedia OAuth seperti GitHub dengan mengintegrasikan Login OAuth generik ke dalam aplikasi Anda menggunakan Firebase SDK untuk menjalankan alur masuk menyeluruh.

Sebelum kamu memulai

Untuk membuat pengguna masuk menggunakan akun GitHub, Anda harus terlebih dahulu mengaktifkan GitHub sebagai penyedia masuk untuk proyek Firebase Anda:

Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.

  1. Di Xcode, dengan proyek aplikasi Anda terbuka, navigasikan ke File > Add Packages .
  2. Saat diminta, tambahkan repositori SDK platform Apple Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Pilih pustaka Firebase Authentication.
  5. Setelah selesai, Xcode akan secara otomatis mulai menyelesaikan dan mengunduh dependensi Anda di latar belakang.

Sekarang, lakukan beberapa langkah konfigurasi:

  1. Di Firebase console , buka bagian Auth .
  2. Pada tab Metode masuk , aktifkan penyedia GitHub .
  3. Tambahkan ID Klien dan Rahasia Klien dari konsol pengembang penyedia itu ke konfigurasi penyedia:
    1. Daftarkan aplikasi Anda sebagai aplikasi pengembang di GitHub dan dapatkan ID Klien dan Rahasia Klien OAuth 2.0 aplikasi Anda.
    2. Pastikan URI pengalihan OAuth Firebase Anda (mis my-app-12345.firebaseapp.com/__/auth/handler ) disetel sebagai URL panggilan balik Otorisasi di halaman setelan aplikasi pada konfigurasi aplikasi GitHub Anda.
  4. Klik Simpan .

Tangani alur masuk dengan Firebase SDK

Untuk menangani alur masuk dengan SDK platform Apple Firebase, ikuti langkah-langkah berikut:

  1. Tambahkan skema URL khusus ke proyek Xcode Anda:

    1. Buka konfigurasi proyek Anda: klik dua kali nama proyek di tampilan hierarki kiri. Pilih aplikasi Anda dari bagian TARGET , lalu pilih tab Info , dan perluas bagian Jenis URL .
    2. Klik tombol + , dan tambahkan skema URL untuk ID klien terbalik Anda. Untuk menemukan nilai ini, buka file konfigurasi GoogleService-Info.plist , dan cari kunci REVERSED_CLIENT_ID . Salin nilai kunci itu, dan tempelkan ke kotak Skema URL di halaman konfigurasi. Biarkan bidang lainnya kosong.

      Setelah selesai, konfigurasi Anda akan terlihat seperti berikut ini (tetapi dengan nilai khusus aplikasi Anda):

  2. Buat instance OAuthProvider menggunakan ID penyedia github.com .

    Cepat

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

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
        
  3. Opsional : Tentukan parameter OAuth khusus tambahan yang ingin Anda kirim dengan permintaan OAuth.

    Cepat

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

    Objective-C

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

    Untuk parameter yang didukung GitHub, lihat dokumentasi GitHub OAuth . Perhatikan bahwa Anda tidak dapat meneruskan parameter yang diperlukan Firebase dengan setCustomParameters . Parameter tersebut adalah client_id , redirect_uri , response_type , scope dan state .

  4. Opsional : Tentukan cakupan OAuth 2.0 tambahan di luar profil dasar yang ingin Anda minta dari penyedia autentikasi. Jika aplikasi Anda memerlukan akses ke data pengguna pribadi dari API GitHub, Anda harus meminta izin untuk mengakses API GitHub di bawah Izin API di konsol pengembang GitHub. Cakupan OAuth yang diminta harus sama persis dengan cakupan yang telah dikonfigurasi sebelumnya dalam izin API aplikasi.

    Cepat

        // 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"]];
        

    Untuk mempelajari lebih lanjut, lihat dokumentasi cakupan GitHub .

  5. Opsional : Jika Anda ingin menyesuaikan cara aplikasi menyajikan SFSafariViewController atau UIWebView saat menampilkan reCAPTCHA kepada pengguna, buat kelas khusus yang sesuai dengan protokol FIRAuthUIDelegate , dan teruskan ke getCredentialWithUIDelegate:completion: .

  6. Mengautentikasi dengan Firebase menggunakan objek penyedia OAuth.

    Cepat

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

    Dengan menggunakan token akses OAuth, Anda dapat memanggil GitHub API .

    Misalnya, untuk mendapatkan informasi profil dasar, Anda dapat memanggil REST API, dengan meneruskan token akses di header Authorization :

    https://api.github.com/user
    
  7. Sementara contoh di atas berfokus pada alur masuk, Anda juga memiliki kemampuan untuk menautkan penyedia GitHub ke pengguna yang sudah ada. Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama yang memungkinkan mereka masuk dengan salah satunya.

    Cepat

        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 as? OAuthCredential)?.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // (authResult.credential as? OAuthCredential)?.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:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // ((FIROAuthCredential *)authResult.credential).idToken
        }];
        
  8. Pola yang sama dapat digunakan dengan reauthenticateWithCredential yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.

    Cepat

        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 as? OAuthCredential)?.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // (authResult.credential as? OAuthCredential)?.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:
          // ((FIROAuthCredential *)authResult.credential).accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // ((FIROAuthCredential *)authResult.credential).idToken
        }];
        

Langkah selanjutnya

Setelah pengguna masuk untuk pertama kalinya, akun pengguna baru dibuat dan ditautkan ke kredensial—yaitu, nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi—yang digunakan pengguna untuk masuk. Akun baru ini disimpan sebagai bagian dari proyek Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam proyek Anda, terlepas dari cara pengguna masuk.

  • Di aplikasi Anda, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FIRUser . Lihat Kelola Pengguna .

  • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage , Anda bisa mendapatkan ID pengguna unik pengguna yang masuk dari variabel auth , dan menggunakannya untuk mengontrol data apa yang dapat diakses pengguna.

Anda dapat mengizinkan pengguna untuk masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Untuk mengeluarkan pengguna, panggil signOut: .

Cepat

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

Anda mungkin juga ingin menambahkan kode penanganan kesalahan untuk berbagai kesalahan otentikasi. Lihat Menangani Kesalahan .