C++ kullanarak Parola Tabanlı Hesaplar kullanarak Firebase ile kimlik doğrulama

KullanıcılarınızınFirebase Authentication kullanıcıların e-posta adreslerini ve şifrelerini kullanması ve uygulamanızın parola tabanlı hesaplar.

Başlamadan önce

  1. Firebase'i C++ projenize ekleyin.
  2. Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolunda bulabilirsiniz.
  3. E-posta/Şifre ile oturum açmayı etkinleştirin:
    1. Firebase konsolunda Auth bölümünü açın.
    2. Oturum açma yöntemi sekmesinde, E-posta/şifre ile oturum açmayı etkinleştirin yöntemini seçin ve Kaydet'i tıklayın.

firebase::auth::Auth sınıfına erişme

Auth sınıfı, tüm API çağrılarına yönelik ağ geçididir.
  1. Auth ve Uygulama başlığı dosyalarını ekleyin:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. Başlatma kodunuzda bir firebase::App sınıfı.
    #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::App için firebase::auth::Auth sınıfını edinin. App ile Auth arasında bire bir eşleme var.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

Şifre tabanlı hesap oluşturma

Şifre içeren yeni bir kullanıcı hesabı oluşturmak için uygulamanızın oturum açma kodunda aşağıdaki adımları tamamlayın:

  1. Yeni bir kullanıcı, uygulamanızın kayıt formunu kullanarak kaydolduğunda uygulamanızın gerektirdiği yeni hesap doğrulama adımlarını (ör. yeni hesabın şifresinin doğru şekilde yazıldığı ve karmaşıklık şartlarınızı karşıladığı doğrulama) tamamlayın.
  2. Yeni kullanıcının e-posta adresini ve şifresini Auth::CreateUserWithEmailAndPassword'e göndererek yeni bir hesap oluşturun:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->CreateUserWithEmailAndPassword(email, password);
  3. Programınızda düzenli olarak devam eden bir güncelleme döngüsü varsa (örneğin, 30 veya 60'ta) veya saniyede bir), sonuçları güncelleme başına bir defa Auth::CreateUserWithEmailAndPasswordLastResult:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->CreateUserWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        const firebase::auth::AuthResult auth_result = *result.result();
        printf("Create user succeeded for email %s\n",
               auth_result.user.email().c_str());
      } else {
        printf("Created user failed with error '%s'\n", result.error_message());
      }
    }
    Programınız etkinliklere dayalıysa bir geri çağırmanın kaydedileceği Gelecek.

Bir kullanıcının e-posta adresi ve şifresiyle oturum açma

Bir kullanıcının şifresiyle oturum açmasını sağlamaya yönelik adımlar, yeni bir hesap oluşturun. Uygulamanızın oturum açma işlevinde aşağıdakileri yapın:

  1. Bir kullanıcı uygulamanızda oturum açtığında kullanıcının e-posta adresini ve şifresini firebase::auth::Auth::SignInWithEmailAndPassword'e iletin:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithEmailAndPassword(email, password);
  2. Programınızda düzenli olarak devam eden bir güncelleme döngüsü varsa (örneğin, 30 veya 60'ta) veya saniyede bir), sonuçları güncelleme başına bir defa Auth::SignInWithEmailAndPasswordLastResult:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithEmailAndPasswordLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        const firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for email %s\n",
               auth_result.user.email().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    Programınız etkinliklere dayalıysa bir geri çağırmanın kaydedileceği Gelecek.

Gelecekte geri arama kaydı oluşturma

Bazı programlarda saniyede 30 veya 60 kez çağrılan Update işlevleri vardır. Örneğin, birçok oyun bu modeli uygular. Bu programlar LastResult işlevleri kullanabilirsiniz. Ancak, programınız etkinliğe dayalıysa geri çağırma işlevlerini kaydetmeyi tercih edebilirsiniz. Gelecek tamamlandıktan sonra bir geri çağırma işlevi çağrılır.
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result,
                      void* user_data) {
  // The callback is called when the Future enters the `complete` state.
  assert(result.status() == firebase::kFutureStatusComplete);

  // Use `user_data` to pass-in program context, if you like.
  MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data);

  // Important to handle both success and failure situations.
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::User* user = *result.result();
    printf("Create user succeeded for email %s\n", user->email().c_str());

    // Perform other actions on User, if you like.
    firebase::auth::User::UserProfile profile;
    profile.display_name = program_context->display_name;
    user->UpdateUserProfile(profile);

  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

void CreateUser(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::AuthResult> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // `&my_program_context` is passed verbatim to OnCreateCallback().
  result.OnCompletion(OnCreateCallback, &my_program_context);
}
İsterseniz geri çağırma işlevi de bir lambda olabilir.
void CreateUserUsingLambda(firebase::auth::Auth* auth) {
  // Callbacks work the same for any firebase::Future.
  firebase::Future<firebase::auth::AuthResult> result =
      auth->CreateUserWithEmailAndPasswordLastResult();

  // The lambda has the same signature as the callback function.
  result.OnCompletion(
      [](const firebase::Future<firebase::auth::User*>& result,
         void* user_data) {
        // `user_data` is the same as &my_program_context, below.
        // Note that we can't capture this value in the [] because std::function
        // is not supported by our minimum compiler spec (which is pre C++11).
        MyProgramContext* program_context =
            static_cast<MyProgramContext*>(user_data);

        // Process create user result...
        (void)program_context;
      },
      &my_program_context);
}

Önerilen: Şifre politikası ayarlayın

Şifre karmaşıklığı koşullarını zorunlu kılarak hesap güvenliğini artırabilirsiniz.

Projeniz için bir şifre politikası yapılandırmak üzere Firebase konsolunun Kimlik Doğrulama Ayarları sayfasında Şifre politikası sekmesini açın:

Kimlik Doğrulama Ayarları

Firebase Authentication şifre politikaları aşağıdaki şifre koşullarını destekler:

  • Küçük harf karakter gerekli

  • Büyük harf karakter gerekli

  • Sayısal karakter gerekli

  • Alfanümerik olmayan karakter gerekli

    Aşağıdaki karakterler, alfanümerik olmayan karakter şartını karşılar: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~.

  • Minimum şifre uzunluğu (6 ila 30 karakter arasındadır; varsayılan olarak 6'dır)

  • Maksimum şifre uzunluğu (maksimum uzunluk 4096 karakter)

Şifre politikası yaptırımını iki modda etkinleştirebilirsiniz:

  • Zorunlu kıl: Kullanıcı, politikanızla uyumlu bir şifreye geçiş yapana dek oturum açma girişimleri başarısız olur.

  • Bildir: Kullanıcıların politikanızla uyumlu olmayan şifrelerle oturum açmasına izin verilir. Zaman kullanarak kullanıcı şifresinin mevcut şifreye uyup uymadığını kontrol tarafından gerçekleştirilen bir politika izlemesi ve kullanıcıdan şifresini kullanmayın.

Yeni kullanıcıların her zaman politikası.

Etkin kullanıcılarınız varsa şifreleri politikanıza uygun olmayan kullanıcıların erişimini engellemek istemediğiniz sürece zorunlu modu etkinleştirmemenizi öneririz. Bunun yerine, kullanıcıların mevcut şifreleriyle oturum açmasına izin veren ve şifrelerinde eksik olan şartlar hakkında onları bilgilendiren bildirim modunu kullanın.

Önerilen: E-posta numaralandırma korumasını etkinleştirin

E-posta adreslerini parametre olarak alan bazı Firebase Authentication yöntemleri, e-posta adresinin kaydedilmesi gerektiğinde (ör. e-posta adresi ve şifreyle oturum açarken) kayıtlı değilse veya kullanılmaması gerektiğinde (ör. kullanıcının e-posta adresini değiştirirken) kayıtlıysa belirli hatalar verir. Bu, kullanıcılara belirli çözümler önermek için yararlı olsa da tarafından kaydedilmiş e-posta adreslerini bulabilmek için kötü niyetli kişiler tarafından yardımcı olur.

Bu riski azaltmak için Google Cloud gcloud aracını kullanarak projeniz için e-posta numaralandırma korumasını etkinleştirmenizi öneririz. Bu etkinleştirildiğinde, özellik, Firebase Authentication ürününün hata bildirme davranışını değiştirir: Uygulamanızın daha kesin hatalara dayanmıyor.

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 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ıların temel profil bilgilerini şuradan alabilirsiniz: firebase::auth::User nesne:

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

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():

auth->SignOut();