Apple Platformlarda GitHub Kullanarak Kimlik Doğrulama

Kullanıcılarınızın aşağıdaki gibi OAuth sağlayıcıları kullanarak Firebase ile kimlik doğrulaması yapmasına izin verebilirsiniz: Firebase SDK'sını kullanıp uygulamanıza genel OAuth Giriş'i entegre ederek GitHub'ı kullanarak uçtan uca oturum açma akışını nasıl uygulayacağınızı belirleyin.

Başlamadan önce

GitHub hesaplarını kullanarak kullanıcıların oturumunu açmak için önce GitHub'ı oturum açma hesabı olarak etkinleştirmeniz gerekir Firebase projeniz için sağlayıcı:

Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.

  1. Xcode'da, uygulama projeniz açıkken Dosya > Paket Ekle'yi tıklayın.
  2. İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk.git
    .
  4. Firebase Authentication kitaplığını seçin.
  5. -ObjC işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.
  6. İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlar.

Şimdi bazı yapılandırma adımlarını uygulayın:

  1. Firebase konsolunda Auth bölümünü açın.
  2. Oturum açma yöntemi sekmesinde, GitHub sağlayıcısını etkinleştirin.
  3. Söz konusu sağlayıcının geliştirici konsolundan İstemci Kimliği ve İstemci Gizli Anahtarı'nı sağlayıcı yapılandırması:
    1. Uygulamanızı kaydetme bir geliştirici uygulaması oluşturun ve uygulamanızın OAuth 2.0 İstemci Kimliği'ni alın ve Client Secret (İstemci Gizli Anahtarı) bölümlerini kullanabilirsiniz.
    2. Firebase OAuth yönlendirme URI'nizin (ör. my-app-12345.firebaseapp.com/__/auth/handler) emin olun uygulamanızın ayarlar sayfasında Yetkilendirme geri çağırma URL'niz olarak GitHub uygulamasının yapılandırması.
  4. Kaydet'i tıklayın.

Oturum açma akışını Firebase SDK'sı ile yönetme

Oturum açma akışını Firebase Apple platformlar SDK'sı ile yönetmek için aşağıdaki adımları uygulayın:

  1. Xcode projenize özel URL şemaları ekleyin:

    1. Proje yapılandırmanızı açın: sol ağaç görünümünde yer alır. HEDEFLER bölümünden uygulamanızı seçin, ardından Bilgi sekmesini seçin ve URL Türleri bölümünü genişletin.
    2. + düğmesini tıklayın ve Kodlanmış Uygulama Kimliğinizi URL olarak ekleyin şema. Kodlanmış Uygulama Kimliğinizi şurada bulabilirsiniz: Genel Firebase konsolunun Ayarlar sayfasındaki Ayarlar bölümünde uygulamasını indirin. Diğer alanları boş bırakın.

      Tamamlandığında yapılandırmanız şuna benzer bir görünümde olacaktır: aşağıdaki (ancak uygulamaya özel değerlerinizle):

      Xcode'un özel URL şeması kurulum arayüzünün ekran görüntüsü

  2. Sağlayıcı kimliğini kullanarak OAuthProvider örneği oluşturma github.com adresine gidin.

    Swift

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

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
        
  3. İsteğe bağlı: Eklemek istediğiniz ek özel OAuth parametrelerini belirtin OAuth isteğiyle gönderir.

    Swift

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

    Objective-C

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

    GitHub'ın desteklediği parametreler için bkz. GitHub OAuth dokümanlarına göz atın. Firebase'in gerekli parametrelerini setCustomParameters Bu parametreler client_id, redirect_uri, response_type, scope ve state öğesini seçebilirsiniz.

  4. İsteğe bağlı: Temel profilin ötesinde, ek OAuth 2.0 kapsamlarını belirtin. kimlik doğrulama sağlayıcısından istekte bulunabilirsiniz. Uygulamanız GitHub API'lerinden gizli kullanıcı verilerine erişim gerektirdiğinde, API İzinleri altında GitHub API'lerine erişmek için GitHub geliştirici konsolu İstenen OAuth kapsamları, uygulamanın API izinlerindeki önceden yapılandırılmış veriler.

    Swift

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

    Daha fazla bilgi edinmek için GitHub kapsamları dokümanları.

  5. İsteğe bağlı: Uygulamanızın Şu durumlarda SFSafariViewController veya UIWebView: önleyici'yi kullanabilirsiniz. Buna göre, AuthUIDelegate protokolüne ve bunu credentialWithUIDelegate.

  6. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın.

    Swift

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

    OAuth erişim jetonunu kullanarak GitHub API'ye gidin.

    Örneğin, temel profil bilgilerini almak için REST API'yi çağırabilir. Authorization üstbilgisindeki erişim jetonunu iletmek:

    https://api.github.com/user
    
  7. Yukarıdaki örneklerde oturum açma akışlarına odaklanılsa da bir GitHub sağlayıcısını mevcut bir kullanıcıya bağlama olanağı sunar. Örneğin, şunları yapabilirsiniz: aynı kullanıcıya birden fazla sağlayıcı bağlayarak iki sağlayıcıdan biriyle oturum açmalarını sağlayabilirsiniz.

    Swift

        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. Aynı desen reauthenticateWithCredential ile de kullanılabilir. Bu işlem şunları yapabilir: gereken hassas işlemler için yeni kimlik bilgilerini almak amacıyla kullanılır. son giriş.

    Swift

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

Sonraki adımlar

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.

  • Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz: User nesnesini tanımlayın. Kullanıcıları Yönetme başlıklı makaleye göz atın.

  • Firebase Realtime Database ve Cloud Storage'ınızda Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz: auth değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.

Bir kullanıcının oturumunu kapatmak için numaralı telefonu arayın signOut: değerleridir.

Swift

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

Ayrıca tüm kimlik doğrulama aralığı için hata işleme kodu da ekleyebilirsiniz. hatalar. Hataları İşleme bölümüne bakın.