หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ตรวจสอบสิทธิ์การใช้ Yahoo และ C ++

คุณสามารถให้ผู้ใช้ของคุณรับรองความถูกต้องกับ Firebase โดยใช้ผู้ให้บริการ OAuth เช่น Yahoo โดยการรวม OAuth ทั่วไปบนเว็บเข้ากับแอปของคุณโดยใช้ Firebase SDK เพื่อดำเนินการสิ้นสุดขั้นตอนการลงชื่อเข้าใช้จนจบ เนื่องจากโฟลว์นี้ต้องการการใช้ Firebase SDK บนโทรศัพท์จึงรองรับเฉพาะใน Android และ iOS

ก่อนที่จะเริ่ม

  1. เพิ่ม Firebase ให้กับโครงการ C ++ ของ คุณ
  2. ในโครงการระดับ build.gradle ไฟล์ให้แน่ใจว่าจะรวมถึงพื้นที่เก็บข้อมูล Maven ของ Google ในทั้งสองของคุณ buildscript และ allprojects ส่วน
  3. ใน คอนโซล Firebase ให้เปิดส่วน Auth
  4. บนแท็บ วิธีลงชื่อเข้า ใช้ให้เปิดใช้งานผู้ให้บริการ Yahoo
  5. เพิ่ม รหัสลูกค้า และ ความลับลูกค้า จากคอนโซลนักพัฒนาซอฟต์แวร์ของผู้ให้บริการไปยังการกำหนดค่าผู้ให้บริการ:
    1. ในการลงทะเบียนไคลเอนต์ Yahoo OAuth ให้ทำตามเอกสารนักพัฒนาของ Yahoo ในการ ลงทะเบียนเว็บแอปพลิเคชันกับ Yahoo

      ตรวจสอบให้แน่ใจว่าได้เลือกสิทธิ์การใช้งาน OpenID Connect API สองรายการ: profile และ email

    2. เมื่อลงทะเบียนแอปกับผู้ให้บริการเหล่านี้โปรดลงทะเบียนโดเมน *.firebaseapp.com สำหรับโครงการของคุณเป็นโดเมนเปลี่ยนเส้นทางสำหรับแอปของคุณ
  6. คลิก บันทึก

เข้าถึง firebase::auth::Auth class firebase::auth::Auth

คลาส Auth เป็นเกตเวย์สำหรับการโทร API ทั้งหมด
  1. เพิ่มไฟล์ส่วนหัว Auth และ App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. ในรหัสเริ่มต้นของคุณสร้าง firebase::App คลาส 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. รับ firebase::auth::Auth class firebase::auth::Auth สำหรับ firebase::App คุณ มีการแมปแบบหนึ่งต่อหนึ่งระหว่าง App และการ Auth
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

จัดการโฟลว์การลงชื่อเข้าใช้ด้วย Firebase SDK

หากต้องการจัดการโฟลว์การลงชื่อเข้าใช้ด้วย Firebase SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างอินสแตนซ์ของ FederatedOAuthProviderData กำหนดค่าด้วย ID ผู้ให้บริการที่เหมาะสมสำหรับ Yahoo

     firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
     
  2. ทางเลือก : ระบุพารามิเตอร์ OAuth ที่กำหนดเองเพิ่มเติมที่คุณต้องการส่งพร้อมกับคำขอ OAuth

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

    สำหรับพารามิเตอร์ที่ Yahoo รองรับดูที่ เอกสาร ของ Yahoo OAuth โปรดทราบว่าคุณไม่สามารถส่งผ่านพารามิเตอร์ที่จำเป็นสำหรับ Firebase ด้วย custom_parameters() พารามิเตอร์เหล่านี้คือ client_id , redirect_uri , response_type , ขอบเขต และ สถานะ

  3. ทางเลือก : ระบุขอบเขต OAuth 2.0 เพิ่มเติมนอกเหนือจาก profile และ email ที่คุณต้องการร้องขอจากผู้ให้บริการการตรวจสอบสิทธิ์ หากแอปพลิเคชันของคุณต้องการเข้าถึงข้อมูลผู้ใช้ส่วนตัวจาก Yahoo APIs คุณจะต้องขออนุญาตไปยัง Yahoo API ภายใต้ สิทธิ์ API ในคอนโซลนักพัฒนาซอฟต์แวร์ของ Yahoo ขอบเขต OAuth ที่ร้องขอต้องตรงกับขอบเขตที่กำหนดไว้ล่วงหน้าในการอนุญาต API ของแอป ตัวอย่างเช่นหากการเข้าถึงเพื่ออ่าน / เขียนถูกร้องขอไปยังผู้ติดต่อผู้ใช้และกำหนดค่าล่วงหน้าในการอนุญาต API ของแอปต้องส่งผ่าน sdct-w แทน OAuth scope sdct-r อ่านอย่างเดียว มิฉะนั้นการไหลจะล้มเหลวและข้อผิดพลาดจะปรากฏให้กับผู้ใช้

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

    หากต้องการเรียนรู้เพิ่มเติมโปรดดู เอกสารประกอบขอบเขตของ Yahoo

  4. เมื่อกำหนดค่าข้อมูลผู้ให้บริการของคุณแล้วให้ใช้เพื่อสร้าง FederatedOAuthProvider

     // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
     
  5. รับรองความถูกต้องกับ Firebase โดยใช้วัตถุผู้ให้บริการรับรองความถูกต้อง โปรดทราบว่าการดำเนินการ FirebaseAuth ต่างจากการดำเนินการอื่น ๆ ซึ่งจะควบคุม UI ของคุณโดยการเปิดมุมมองเว็บที่ผู้ใช้สามารถป้อนข้อมูลประจำตัวของพวกเขา

    หากต้องการเริ่มโฟลว์การลงชื่อเข้าใช้ให้โทร signInWithProvider :

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

    ใบสมัครของคุณอาจรอหรือ ลงทะเบียนการโทรกลับในอนาคต

  6. ในขณะที่ตัวอย่างข้างต้นมุ่งเน้นไปที่ขั้นตอนการลงชื่อเข้าใช้คุณยังมีความสามารถในการเชื่อมโยงผู้ให้บริการ Yahoo กับผู้ใช้ปัจจุบันโดยใช้ LinkWithProvider ตัวอย่างเช่นคุณสามารถเชื่อมโยงผู้ให้บริการหลายรายกับผู้ใช้เดียวกันทำให้ผู้ใช้ลงชื่อเข้าใช้ด้วย

     firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
     
  7. รูปแบบเดียวกันสามารถใช้กับ ReauthenticateWithProvider ซึ่งสามารถใช้เพื่อดึงข้อมูลประจำตัวใหม่สำหรับการดำเนินการที่ละเอียดอ่อนที่ต้องใช้การเข้าสู่ระบบล่าสุด

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

    ใบสมัครของคุณอาจรอหรือ ลงทะเบียนการโทรกลับในอนาคต

ขั้นตอนถัดไป

หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรกบัญชีผู้ใช้ใหม่จะถูกสร้างและเชื่อมโยงกับข้อมูลรับรองนั่นคือชื่อผู้ใช้และรหัสผ่านหมายเลขโทรศัพท์หรือข้อมูลผู้ให้บริการรับรองความถูกต้อง - ผู้ใช้ที่ลงชื่อเข้าใช้ด้วย บัญชีใหม่นี้ถูกจัดเก็บเป็นส่วนหนึ่งของโครงการ Firebase ของคุณและสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโครงการของคุณโดยไม่คำนึงว่าผู้ใช้ลงชื่อเข้าใช้อย่างไร

  • ในแอพของคุณคุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้จาก firebase::auth::User วัตถุ 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();
    }
    
  • ใน กฎ ฐานข้อมูล Firebase Realtime และ Cloud Storage Security คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้

คุณสามารถอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยใช้ผู้ให้บริการการตรวจสอบความถูกต้องหลายคนโดย เชื่อมโยงข้อมูลรับรองผู้ให้บริการรับรองความถูกต้องกับบัญชีผู้ใช้ที่มีอยู่

ในการออกจากระบบผู้ใช้โทร SignOut() :

auth->SignOut();