Firebase Authentication'ı, kullanıcılarınızın e-posta adreslerini ve parolalarını kullanarak Firebase ile kimlik doğrulaması yapmasına izin vermek ve uygulamanızın parola tabanlı hesaplarını yönetmek için kullanabilirsiniz.
Sen başlamadan önce
- Firebase'i C++ projenize ekleyin .
- Uygulamanızı henüz Firebase projenize bağlamadıysanız, bunu Firebase konsolundan yapın.
- E-posta/Parola ile oturum açmayı etkinleştir:
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum açma yöntemi sekmesinde, E- posta/parola oturum açma yöntemini etkinleştirin ve Kaydet'e tıklayın .
firebase::auth::Auth
sınıfına erişin
Auth
sınıfı, tüm API çağrıları için ağ geçididir.- Auth ve App başlık dosyalarını ekleyin:
#include "firebase/app.h" #include "firebase/auth.h"
- 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__)
-
firebase::App
içinfirebase::auth::Auth
sınıfını edinin.App
veAuth
arasında bire bir eşleme vardır.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Parola tabanlı bir hesap oluşturun
Parola ile yeni bir kullanıcı hesabı oluşturmak için uygulamanızın oturum açma kodunda aşağıdaki adımları tamamlayın:
- Yeni bir kullanıcı, uygulamanızın kayıt formunu kullanarak kaydolduğunda, yeni hesabın parolasının doğru yazıldığını ve karmaşıklık gereksinimlerinizi karşıladığını doğrulamak gibi, uygulamanızın gerektirdiği tüm yeni hesap doğrulama adımlarını tamamlayın.
- Yeni kullanıcının e-posta adresini ve parolasını
Auth::CreateUserWithEmailAndPassword
ileterek yeni bir hesap oluşturun:firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPassword(email, password);
- Programınızda düzenli olarak çalışan bir güncelleme döngüsü varsa (saniyede 30 veya 60 kez), sonuçları her güncellemede bir kez
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()); } }
ile kontrol edebilirsiniz. Gelecek üzerine bir geri arama kaydetmek için .
Bir e-posta adresi ve şifre ile bir kullanıcı oturumu açın
Bir kullanıcıyı parola ile oturum açma adımları, yeni bir hesap oluşturma adımlarına benzer. Uygulamanızın oturum açma işlevinde aşağıdakileri yapın:
- Bir kullanıcı uygulamanızda oturum açtığında, kullanıcının e-posta adresini ve parolasını
firebase::auth::Auth::SignInWithEmailAndPassword
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithEmailAndPassword(email, password);
iletin - Programınızda düzenli olarak çalışan bir güncelleme döngüsü varsa (saniyede 30 veya 60 kez), sonuçları her güncellemede bir kez
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()); } }
ile kontrol edebilirsiniz. Gelecek üzerine bir geri arama kaydetmek için .
Bir Gelecek için bir geri arama kaydedin
Bazı programların saniyede 30 veya 60 kez çağrılanUpdate
işlevleri vardır. Örneğin, birçok oyun bu modeli takip eder. Bu programlar, zaman uyumsuz çağrıları yoklamak için LastResult
işlevlerini çağırabilir. Ancak, programınız olay güdümlüyse, geri arama işlevlerini kaydetmeyi tercih edebilirsiniz. Geleceğin tamamlanmasının ardından bir geri arama 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 bir lambda da 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: E-posta numaralandırma korumasını etkinleştir
E-posta adreslerini parametre olarak alan bazı Firebase Kimlik Doğrulama yöntemleri, e-posta adresinin kaydedilmesi gerektiğinde (örneğin, bir e-posta adresi ve şifreyle oturum açarken) kayıtlı olmaması veya kullanılmaması gerektiğinde kaydedilmesi (örneğin, bir kullanıcının e-posta adresini değiştirirken). Bu, kullanıcılara belirli çareler önermek için yararlı olsa da, kullanıcılarınız tarafından kaydedilen e-posta adreslerini keşfetmek için kötü niyetli aktörler tarafından da kötüye kullanılabilir.
Bu riski azaltmak için Google Cloud gcloud
aracını kullanarak projeniz için e-posta numaralandırma korumasını etkinleştirmenizi öneririz. Bu özelliğin etkinleştirilmesinin Firebase Authentication'ın hata raporlama davranışını değiştirdiğini unutmayın: uygulamanızın daha spesifik hatalara dayanmadığından emin olun.
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 (yani, kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak saklanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir 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 Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenlik Kurallarınızda , oturum açmış kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve bunu, bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Bir kullanıcının oturumunu kapatmak için SignOut()
arayın:
auth->SignOut();