Catch up on everthing we announced at this year's Firebase Summit. Learn more

ตรวจสอบสิทธิ์ด้วย Firebase โดยใช้ระบบตรวจสอบสิทธิ์แบบกำหนดเองและ C++

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

ก่อนจะเริ่ม

  1. เพิ่ม Firebase กับโครงการของคุณ C ++
  2. รับคีย์เซิร์ฟเวอร์ของโครงการของคุณ:
    1. ไปที่ บริการบัญชี หน้าในการตั้งค่าของโครงการ
    2. คลิกสร้างคีย์ส่วนตัวใหม่ที่ด้านล่างของส่วน Firebase SDK ผู้ดูแลระบบของหน้าบัญชีบริการ
    3. คู่คีย์สาธารณะ/ส่วนตัวของบัญชีบริการใหม่จะถูกบันทึกไว้ในคอมพิวเตอร์ของคุณโดยอัตโนมัติ คัดลอกไฟล์นี้ไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของคุณ

ตรวจสอบสิทธิ์ด้วย Firebase

Auth ชั้นเป็นประตูสำหรับทุกการเรียก API
  1. เพิ่มการตรวจสอบสิทธิ์และ App ไฟล์ส่วนหัว:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. ในรหัสการเริ่มต้นของคุณให้สร้าง 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 ชั้นเรียนสำหรับคุณ firebase::App มีแบบหนึ่งต่อหนึ่งระหว่างการทำแผนที่เป็น App และ Auth
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
โทร Auth::SignInWithCustomToken กับโทเค็นจากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของคุณ
  1. เมื่อผู้ใช้ลงชื่อเข้าใช้แอปของคุณ ให้ส่งข้อมูลรับรองการลงชื่อเข้าใช้ (เช่น ชื่อผู้ใช้และรหัสผ่าน) ไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของคุณ ตรวจสอบเซิร์ฟเวอร์ของคุณสิทธิและผลตอบแทน ที่กำหนดเอง token หากพวกเขาเป็นที่ถูกต้อง
  2. หลังจากที่คุณได้รับการกำหนดเอง token จากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของคุณผ่านไป Auth::SignInWithCustomToken เพื่อเข้าสู่ระบบของผู้ใช้:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. ถ้าโปรแกรมของคุณมีห่วงปรับปรุงที่วิ่งอย่างสม่ำเสมอ (พูดวันที่ 30 หรือ 60 ครั้งต่อวินาที) คุณสามารถตรวจสอบผลครั้งต่อการปรับปรุงกับ Auth::SignInWithCustomTokenLastResult :
    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());
      }
    }
    
    หรือถ้าโปรแกรมของคุณเป็นเหตุการณ์ที่ขับเคลื่อนด้วยคุณอาจต้องการ เพื่อ ลงทะเบียนโทรกลับในอนาคต

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

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

  • ในปพลิเคชันของคุณคุณจะได้รับข้อมูลรายละเอียดของผู้ใช้พื้นฐานจาก 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 เรียลไทม์และการจัดเก็บเมฆ กฎการรักษาความปลอดภัย , คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

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

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

auth->SignOut();