Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Otentikasi dengan Firebase Menggunakan Sistem Otentikasi Kustom dan C++

Anda dapat mengintegrasikan Firebase Authentication dengan sistem autentikasi khusus dengan memodifikasi server autentikasi untuk menghasilkan token bertanda tangan khusus saat pengguna berhasil masuk. Aplikasi Anda menerima token ini dan menggunakannya untuk mengautentikasi dengan Firebase.

Sebelum kamu memulai

  1. Tambahkan Firebase ke proyek C++ Anda .
  2. Dapatkan kunci server proyek Anda:
    1. Buka halaman Akun Layanan di pengaturan proyek Anda.
    2. Klik Buat Kunci Pribadi Baru di bagian bawah Firebase Admin SDK pada halaman Akun Layanan .
    3. Pasangan kunci publik/pribadi akun layanan baru secara otomatis disimpan di komputer Anda. Salin file ini ke server otentikasi Anda.

Otentikasi dengan Firebase

Kelas Auth adalah gerbang untuk semua panggilan API.
  1. Tambahkan file header Auth dan Aplikasi:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. Dalam kode inisialisasi Anda, buat kelas 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__)
    
  3. Dapatkan kelas firebase::auth::Auth untuk firebase::App Anda. Ada pemetaan satu-ke-satu antara App dan Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
Panggil Auth::SignInWithCustomToken dengan token dari server autentikasi Anda.
  1. Saat pengguna masuk ke aplikasi Anda, kirimkan kredensial masuk mereka (misalnya, nama pengguna dan sandi) ke server autentikasi Anda. Server Anda memeriksa kredensial dan mengembalikan token khusus jika valid.
  2. Setelah Anda menerima token khusus dari server autentikasi, berikan ke Auth::SignInWithCustomToken untuk masuk ke pengguna:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. Jika program Anda memiliki loop pembaruan yang berjalan secara teratur (misalnya 30 atau 60 kali per detik), Anda dapat memeriksa hasilnya sekali per pembaruan dengan Auth::SignInWithCustomTokenLastResult : l10n
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    Atau, jika program Anda didorong oleh peristiwa, Anda dapat memilih untuk mendaftarkan panggilan balik di Masa Depan .

Langkah selanjutnya

Setelah pengguna masuk untuk pertama kalinya, akun pengguna baru dibuat dan ditautkan ke kredensial—yaitu, nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi—yang digunakan pengguna untuk masuk. Akun baru ini disimpan sebagai bagian dari proyek Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam proyek Anda, terlepas dari cara pengguna masuk.

  • Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari firebase::auth::User :

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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();
    }
    
  • Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage , Anda bisa mendapatkan ID pengguna unik pengguna yang masuk dari variabel auth , dan menggunakannya untuk mengontrol data apa yang dapat diakses pengguna.

Anda dapat mengizinkan pengguna masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Untuk mengeluarkan pengguna, panggil SignOut() :

auth->SignOut();