Anda dapat mengintegrasikan Firebase Authentication dengan sistem autentikasi kustom, dengan cara memodifikasi server autentikasi Anda untuk menghasilkan token bertanda tangan kustom ketika pengguna berhasil login. Aplikasi Anda akan menerima token ini dan menggunakannya untuk melakukan autentikasi dengan Firebase.
Sebelum memulai
- Tambahkan Firebase ke project C++ Anda.
- Dapatkan kunci server project Anda:
- Buka halaman Service Accounts di setelan project Anda.
- Klik Generate New Private Key di bagian bawah Firebase Admin SDK pada halaman Service Accounts.
- Pasangan kunci umum/pribadi baru untuk akun layanan secara otomatis disimpan di komputer Anda. Salin file ini ke server autentikasi Anda.
Melakukan Autentikasi dengan Firebase
ClassAuth
adalah gateway untuk semua panggilan API.- Tambahkan file header Auth dan App:
#include "firebase/app.h" #include "firebase/auth.h"
- Pada kode inisialisasi Anda, buat class
firebase::App
.#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__)
- Dapatkan class
firebase::auth::Auth
untukfirebase::App
Anda. Terdapat fungsi pemetaan one-to-one antaraApp
danAuth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Auth::SignInWithCustomToken
dengan token dari server autentikasi.
- Ketika pengguna login ke aplikasi Anda, kirimkan kredensial loginnya (misalnya, nama pengguna dan sandi) ke server autentikasi. Server Anda akan memeriksa kredensial dan menampilkan token kustom jika kredensial tersebut valid.
- Setelah Anda menerima token kustom dari server autentikasi, teruskan
token tersebut ke
Auth::SignInWithCustomToken
agar pengguna dapat login:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token);
- Jika program Anda memiliki loop pembaruan yang berjalan secara teratur (misalnya 30 atau 60 kali per detik), Anda dapat memeriksa hasilnya satu kali per pembaruan dengan
Auth::SignInWithCustomTokenLastResult
: Atau, jika program Anda dikendalikan oleh peristiwa, Anda bisa memilih untuk mendaftarkan callback pada Future.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()); } }
Langkah berikutnya
Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.
-
Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari objek
firebase::auth::User
: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(); }
Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik milik pengguna yang login dari variabel
auth
, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.
Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.
Untuk memproses logout pengguna, panggil SignOut()
:
auth->SignOut();