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

Otentikasi Menggunakan Yahoo dan C++

Anda dapat mengizinkan pengguna Anda mengautentikasi dengan Firebase menggunakan penyedia OAuth seperti Yahoo dengan mengintegrasikan Login OAuth generik berbasis web ke dalam aplikasi Anda menggunakan Firebase SDK untuk menjalankan alur masuk menyeluruh. Karena alur ini memerlukan penggunaan SDK Firebase berbasis ponsel, alur ini hanya didukung di platform Android dan Apple.

Sebelum kamu memulai

  1. Tambahkan Firebase ke proyek C++ Anda .
  2. Di Firebase console , buka bagian Auth .
  3. Pada tab Metode masuk , aktifkan penyedia Yahoo .
  4. Tambahkan ID Klien dan Rahasia Klien dari konsol pengembang penyedia itu ke konfigurasi penyedia:
    1. Untuk mendaftarkan klien OAuth Yahoo, ikuti dokumentasi pengembang Yahoo tentang mendaftarkan aplikasi web dengan Yahoo .

      Pastikan untuk memilih dua izin OpenID Connect API: profile dan email .

    2. Saat mendaftarkan aplikasi dengan penyedia ini, pastikan untuk mendaftarkan domain *.firebaseapp.com untuk proyek Anda sebagai domain pengalihan untuk aplikasi Anda.
  5. Klik Simpan .

Akses firebase::auth::Auth class

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);
    

Tangani alur masuk dengan Firebase SDK

Untuk menangani alur masuk dengan Firebase SDK, ikuti langkah-langkah berikut:

  1. Buat instance dari FederatedOAuthProviderData yang dikonfigurasi dengan ID penyedia yang sesuai untuk Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. Opsional : Tentukan parameter OAuth khusus tambahan yang ingin Anda kirim dengan permintaan OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    

    Untuk parameter yang didukung Yahoo, lihat dokumentasi Yahoo OAuth . Perhatikan bahwa Anda tidak dapat meneruskan parameter yang diperlukan Firebase dengan custom_parameters() . Parameter ini adalah client_id , redirect_uri , response_type , scope dan state .

  3. Opsional : Tentukan cakupan OAuth 2.0 tambahan di luar profile dan email yang ingin Anda minta dari penyedia autentikasi. Jika aplikasi Anda memerlukan akses ke data pengguna pribadi dari Yahoo API, Anda harus meminta izin ke Yahoo API di bawah Izin API di konsol pengembang Yahoo. Cakupan OAuth yang diminta harus sama persis dengan cakupan yang telah dikonfigurasi sebelumnya dalam izin API aplikasi. Misalnya jika, akses baca/tulis diminta ke kontak pengguna dan telah dikonfigurasikan sebelumnya dalam izin API aplikasi, sdct-w harus diteruskan alih-alih cakupan OAuth hanya-baca sdct-r . Jika tidak, aliran akan gagal dan kesalahan akan ditampilkan kepada pengguna akhir.

    // Request access to Yahoo Mail API.
    provider_data.scopes.push_back("mail-r");
    // This must be preconfigured in the app's API permissions.
    provider_data.scopes.push_back("sdct-w");
    

    Untuk mempelajari lebih lanjut, lihat dokumentasi cakupan Yahoo .

  4. Setelah data penyedia Anda dikonfigurasi, gunakan untuk membuat FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Mengautentikasi dengan Firebase menggunakan objek penyedia Auth. Perhatikan bahwa tidak seperti operasi FirebaseAuth lainnya, ini akan mengontrol UI Anda dengan memunculkan tampilan web tempat pengguna dapat memasukkan kredensial mereka.

    Untuk memulai alur masuk, panggil signInWithProvider :

    firebase::Future<firebase::auth::SignInResult> result =
      auth->SignInWithProvider(provider_data);
    

    Aplikasi Anda kemudian dapat menunggu atau mendaftarkan panggilan balik di Masa Depan .

  6. Sementara contoh di atas berfokus pada alur masuk, Anda juga memiliki kemampuan untuk menautkan penyedia Yahoo ke pengguna yang ada menggunakan LinkWithProvider . Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama yang memungkinkan mereka masuk dengan salah satunya.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Pola yang sama dapat digunakan dengan ReauthenticateWithProvider yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

    Aplikasi Anda kemudian dapat menunggu atau 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();