คุณอนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase ได้โดยใช้ผู้ให้บริการ OAuth เช่น Microsoft Azure Active Directory ด้วยการผสานรวมการเข้าสู่ระบบ OAuth ทั่วไปบนเว็บ เข้ามาในแอปโดยใช้ Firebase SDK เพื่อดำเนินการลงชื่อเข้าใช้ตั้งแต่ต้นทางถึงปลายทาง เนื่องจากขั้นตอนนี้ต้องใช้ Firebase SDK บนโทรศัพท์ จึงมีเพียง ที่รองรับในแพลตฟอร์ม Android และ Apple
ก่อนเริ่มต้น
- เพิ่ม Firebase ไปยังโปรเจ็กต์ C++
- ในคอนโซล Firebase ให้เปิดส่วน Auth
- เปิดใช้ผู้ให้บริการ Microsoft ในแท็บวิธีการลงชื่อเข้าใช้
- เพิ่มรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์จาก Play Console ของผู้ให้บริการรายนั้นลงใน
การกำหนดค่าผู้ให้บริการ:
- หากต้องการลงทะเบียนไคลเอ็นต์ Microsoft OAuth ให้ทำตามคำแนะนำใน การเริ่มต้นอย่างรวดเร็ว: ลงทะเบียนแอปด้วยปลายทาง Azure Active Directory v2.0 โปรดทราบว่าปลายทางนี้รองรับการลงชื่อเข้าใช้โดยใช้บัญชีส่วนตัวของ Microsoft รวมถึง Azure บัญชี Active Directory ดูข้อมูลเพิ่มเติม เกี่ยวกับ Azure Active Directory v2.0
- เมื่อลงทะเบียนแอปกับผู้ให้บริการเหล่านี้ อย่าลืมลงทะเบียน
โดเมน
*.firebaseapp.com
สำหรับโปรเจ็กต์ของคุณเป็นโดเมนการเปลี่ยนเส้นทางสำหรับ แอป
- คลิกบันทึก
เข้าถึงชั้นเรียน firebase::auth::Auth
คลาส Auth
เป็นเกตเวย์สำหรับการเรียก API ทั้งหมด
- เพิ่มไฟล์ส่วนหัว Auth และ App ดังนี้
#include "firebase/app.h" #include "firebase/auth.h"
- ในโค้ดเริ่มต้น ให้สร้าง
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__)
- รับชั้นเรียน
firebase::auth::Auth
สำหรับfirebase::App
มีการแมปแบบหนึ่งต่อหนึ่งระหว่างApp
และAuth
firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK
หากต้องการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK ให้ทำตามขั้นตอนต่อไปนี้
สร้างอินสแตนซ์ของ
FederatedOAuthProviderData
ที่กำหนดค่าด้วย รหัสผู้ให้บริการที่เหมาะสมสำหรับ Microsoftfirebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
ไม่บังคับ: ระบุพารามิเตอร์ OAuth ที่กำหนดเองเพิ่มเติมที่ต้องการ ส่งด้วยคำขอ OAuth
// Prompt user to re-authenticate to Microsoft. provider_data.custom_parameters["prompt"] = "login"; // Target specific email with login hint. provider_data.custom_parameters["login_hint"] = "user@firstadd.onmicrosoft.com";
สำหรับพารามิเตอร์ที่ Microsoft รองรับ โปรดดูส่วน เอกสาร Microsoft OAuth โปรดทราบว่าคุณไม่สามารถส่งพารามิเตอร์ที่จําเป็นของ Firebase ด้วย
setCustomParameters()
พารามิเตอร์เหล่านี้คือ client_id response_type, redirect_uri, state, scope และ response_modeเพื่ออนุญาตให้เฉพาะผู้ใช้จากกลุ่มผู้ใช้ Azure AD บางรายลงนาม ลงในแอปพลิเคชัน ซึ่งอาจเป็นชื่อโดเมนที่เหมาะสมของกลุ่มผู้ใช้ Azure AD หรือตัวระบุ GUID ของกลุ่มผู้ใช้ได้ ซึ่งทำได้ด้วยการระบุ "กลุ่มผู้ใช้" ในออบเจ็กต์พารามิเตอร์ที่กำหนดเอง
// Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". provider_data.custom_parameters["tenant"] ="TENANT_ID";
ไม่บังคับ: ระบุขอบเขต OAuth 2.0 เพิ่มเติมที่นอกเหนือจากโปรไฟล์พื้นฐานที่ ที่ต้องการขอจากผู้ให้บริการตรวจสอบสิทธิ์
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");
ดูข้อมูลเพิ่มเติมได้ที่ เอกสารเกี่ยวกับสิทธิ์ของ Microsoft และความยินยอม
เมื่อกำหนดค่าข้อมูลผู้ให้บริการแล้ว ให้ใช้ข้อมูลเพื่อสร้าง
FederatedOAuthProvider
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
ตรวจสอบสิทธิ์กับ Firebase โดยใช้ออบเจ็กต์ผู้ให้บริการการตรวจสอบสิทธิ์ โปรดทราบว่าสิ่งที่ การดำเนินการ FirebaseAuth อื่นๆ ขั้นตอนนี้จะควบคุม UI ของคุณด้วยการ เป็นมุมมองเว็บที่ผู้ใช้สามารถป้อนข้อมูลเข้าสู่ระบบได้
หากต้องการเริ่มขั้นตอนการลงชื่อเข้าใช้ โปรดโทรหา
SignInWithProvider
firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);
จากนั้น แอปพลิเคชันของคุณอาจต้องรอหรือ ให้ลงทะเบียนการโทรกลับในอนาคต
ด้วยการใช้โทเค็นเพื่อการเข้าถึง OAuth คุณสามารถเรียก Microsoft Graph API
Microsoft แตกต่างจากผู้ให้บริการรายอื่นที่ Firebase Auth รองรับ ระบุ URL รูปภาพ แต่ข้อมูลไบนารีสำหรับรูปโปรไฟล์จะต้อง ได้รับคำขอผ่าน Microsoft Graph API
แม้ว่าตัวอย่างข้างต้นจะเน้นที่ขั้นตอนการลงชื่อเข้าใช้ แต่คุณก็มี ความสามารถในการลิงก์ผู้ให้บริการ Microsoft Azure Active Directory กับผู้ให้บริการที่มีอยู่ ผู้ใช้ที่ใช้
LinkWithProvider
ตัวอย่างเช่น คุณสามารถลิงก์ เป็นผู้ให้บริการรายเดียวกัน โดยอนุญาตให้ลงชื่อเข้าใช้ด้วยผู้ให้บริการใดบริการหนึ่งได้firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
รูปแบบเดียวกันนี้สามารถใช้กับ
ReauthenticateWithProvider
ซึ่งสามารถ ใช้เพื่อเรียกข้อมูลข้อมูลเข้าสู่ระบบใหม่สำหรับการดำเนินการที่มีความละเอียดอ่อนซึ่งจำเป็นต้องใช้ การเข้าสู่ระบบครั้งล่าสุดfirebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
จากนั้นแอปพลิเคชันของคุณอาจรอหรือลงทะเบียนการโทรกลับในวันที่ อนาคต
ขั้นตอนถัดไป
หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่ และ ซึ่งก็คือชื่อผู้ใช้และรหัสผ่าน โทรศัพท์ หมายเลข หรือข้อมูลของผู้ให้บริการตรวจสอบสิทธิ์ ซึ่งก็คือผู้ใช้ที่ลงชื่อเข้าใช้ ใหม่นี้ จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้เพื่อระบุ ผู้ใช้สำหรับทุกแอปในโปรเจ็กต์ของคุณ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม
-
ในแอป คุณสามารถดูข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ได้จาก
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(); }
ในFirebase Realtime DatabaseและCloud Storage กฎความปลอดภัย คุณสามารถทำสิ่งต่อไปนี้ รับรหัสผู้ใช้ที่ไม่ซ้ำของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร
auth
และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้
คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้การตรวจสอบสิทธิ์หลายรายการได้ โดยลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการการตรวจสอบสิทธิ์กับ บัญชีผู้ใช้ที่มีอยู่เดิม
หากต้องการนำผู้ใช้ออกจากระบบ โปรดโทร
SignOut()
auth->SignOut();