Özel Kimlik Doğrulama Sistemi ve C++ Kullanarak Firebase ile Kimlik Doğrulama

Kimlik doğrulama sunucunuzu, kullanıcı başarılı bir şekilde oturum açtığında özel imzalı jetonlar oluşturacak şekilde değiştirerek Firebase Authentication'yı özel bir kimlik doğrulama sistemiyle entegre edebilirsiniz. Uygulamanız bu jetonu alır ve Firebase ile kimlik doğrulamak için kullanır.

Başlamadan önce

  1. Firebase'i C++ projenize ekleyin.
  2. Projenizin sunucu anahtarlarını alın:
    1. Firebase konsolunda Ayarlar > Hizmet hesapları sekmesine gidin.
    2. Firebase Admin SDK bölümünün alt kısmında Yeni Özel Anahtar Oluştur'u tıklayın.
    3. Yeni hizmet hesabının herkese açık/özel anahtar çifti otomatik olarak bilgisayarınıza kaydedilir. Bu dosyayı kimlik doğrulama sunucunuza kopyalayın.

Firebase ile kimlik doğrulama

Auth sınıfı, tüm API çağrıları için ağ geçididir.
  1. Auth ve App üstbilgi dosyalarını ekleyin:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. Başlatma kodunuzda bir firebase::App sınıfı oluşturun.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
  3. firebase::auth::Auth sınıfını firebase::App için edinin. App ile Auth arasında bire bir eşleme vardır.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Kimlik doğrulama sunucunuzdan alınan jetonla Auth::SignInWithCustomToken numaralı telefonu arayın.
  1. Kullanıcılar uygulamanızda oturum açtığında oturum açma kimlik bilgilerini (örneğin, kullanıcı adı ve şifreleri) kimlik doğrulama sunucunuza gönderin. Sunucunuz kimlik bilgilerini kontrol eder ve geçerli olmaları durumunda özel bir jeton döndürür.
  2. Kimlik doğrulama sunucunuzdan özel jetonu aldıktan sonra, kullanıcının oturumunu açmak için jetonu Auth::SignInWithCustomToken'ya iletin:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
  3. Programınızda düzenli olarak çalışan bir güncelleme döngüsü varsa (örneğin, saniyede 30 veya 60 kez) sonuçları Auth::SignInWithCustomTokenLastResult ile güncelleme başına bir kez kontrol edebilirsiniz:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    Alternatif olarak, programınız etkinlik odaklıysa Future üzerinde geri çağırma kaydetmeyi tercih edebilirsiniz.

Sonraki adımlar

Bir kullanıcı ilk kez oturum açtıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda, kullanıcının temel profil bilgilerini firebase::auth::User nesnesinden alabilirsiniz:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için bu kimliği kullanabilirsiniz.

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak kullanıcıların uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.

Bir kullanıcının oturumunu kapatmak için SignOut() numaralı telefonu arayın:

auth->SignOut();