คุณสามารถใช้การตรวจสอบสิทธิ์ Firebase เพื่ออนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยใช้วิธีการลงชื่อเข้าใช้ตั้งแต่หนึ่งวิธีขึ้นไป รวมถึงที่อยู่อีเมลและรหัสผ่านในการลงชื่อเข้าใช้ และผู้ให้บริการข้อมูลประจำตัวแบบรวมศูนย์ เช่น การลงชื่อเข้าใช้ Google และการเข้าสู่ระบบด้วย Facebook บทช่วยสอนนี้ช่วยให้คุณเริ่มต้นใช้งาน Firebase Authentication โดยแสดงวิธีเพิ่มที่อยู่อีเมลและรหัสผ่านในการลงชื่อเข้าใช้แอปของคุณ
เชื่อมต่อโปรเจ็กต์ C++ ของคุณกับ Firebase
ก่อนที่คุณจะสามารถใช้ Firebase Authentication คุณต้อง:
ลงทะเบียนโปรเจ็กต์ C++ ของคุณและกำหนดค่าให้ใช้ Firebase
หากโปรเจ็กต์ C++ ของคุณใช้ Firebase อยู่แล้ว แสดงว่ามีการลงทะเบียนและกำหนดค่าสำหรับ Firebase แล้ว
เพิ่ม Firebase C++ SDK ให้กับโปรเจ็กต์ C++ ของคุณ
โปรดทราบว่าการเพิ่ม Firebase ไปยังโปรเจ็กต์ C++ ของคุณเกี่ยวข้องกับงานทั้งใน คอนโซล Firebase และในโปรเจ็กต์ C++ ที่เปิดอยู่ (เช่น คุณดาวน์โหลดไฟล์การกำหนดค่า Firebase จากคอนโซล จากนั้นย้ายไฟล์เหล่านั้นไปยังโปรเจ็กต์ C++ ของคุณ)
ลงทะเบียนผู้ใช้ใหม่
สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้ใหม่ลงทะเบียนกับแอปของคุณโดยใช้ที่อยู่อีเมลและรหัสผ่าน เมื่อผู้ใช้กรอกแบบฟอร์ม ให้ตรวจสอบที่อยู่อีเมลและรหัสผ่านที่ผู้ใช้ให้ไว้ จากนั้นส่งต่อไปยังเมธอด CreateUserWithEmailAndPassword
:
firebase::Future<firebase::auth::AuthResult> result =
auth->CreateUserWithEmailAndPassword(email, password);
คุณสามารถตรวจสอบสถานะของการดำเนินการสร้างบัญชีได้โดยการลงทะเบียนการโทรกลับบนออบเจ็กต์ CreateUserWithEmailAndPasswordLastResult
Future หรือหากคุณกำลังเขียนเกมหรือแอปที่มีการวนรอบการอัปเดตเป็นระยะบางประเภท โดยการสำรวจสถานะในลูปการอัปเดต
ตัวอย่างเช่น การใช้อนาคต:
firebase::Future<firebase::auth::AuthResult> result =
auth->CreateUserWithEmailAndPasswordLastResult();
// The lambda has the same signature as the callback function.
result.OnCompletion(
[](const firebase::Future<firebase::auth::AuthResult>& result,
void* user_data) {
// `user_data` is the same as &my_program_context, below.
// Note that we can't capture this value in the [] because std::function
// is not supported by our minimum compiler spec (which is pre C++11).
MyProgramContext* program_context =
static_cast<MyProgramContext*>(user_data);
// Process create user result...
(void)program_context;
},
&my_program_context);
หรือหากต้องการใช้การโพล ให้ทำบางอย่างเช่นตัวอย่างต่อไปนี้ในลูปการอัปเดตเกมของคุณ:
firebase::Future<firebase::auth::AuthResult> result =
auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
if (result.error() == firebase::auth::kAuthErrorNone) {
firebase::auth::AuthResult* auth_result = *result.result();
printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
} else {
printf("Created user failed with error '%s'\n", result.error_message());
}
}
ลงชื่อเข้าใช้ผู้ใช้ที่มีอยู่
สร้างแบบฟอร์มที่อนุญาตให้ผู้ใช้ปัจจุบันลงชื่อเข้าใช้ด้วยที่อยู่อีเมลและรหัสผ่านของตน เมื่อผู้ใช้กรอกแบบฟอร์ม ให้เรียกใช้เมธอด SignInWithEmailAndPassword
:
firebase::Future<firebase::auth::AuthResult> result =
auth->SignInWithEmailAndPassword(email, password);
รับผลการดำเนินการลงชื่อเข้าใช้แบบเดียวกับที่คุณได้รับผลการลงทะเบียน
ตั้งค่า Listener สถานะการตรวจสอบสิทธิ์และรับข้อมูลบัญชี
หากต้องการตอบสนองต่อเหตุการณ์การลงชื่อเข้าใช้และออกจากระบบ ให้แนบ Listener เข้ากับออบเจ็กต์การรับรองความถูกต้องส่วนกลาง Listener นี้จะถูกเรียกทุกครั้งที่สถานะการลงชื่อเข้าใช้ของผู้ใช้เปลี่ยนแปลง เนื่องจาก Listener ทำงานเฉพาะหลังจากที่ออบเจ็กต์การรับรองความถูกต้องถูกเตรียมใช้งานโดยสมบูรณ์แล้วเท่านั้น และหลังจากการโทรผ่านเครือข่ายเสร็จสิ้นแล้ว จึงเป็นสถานที่ที่ดีที่สุดในการรับข้อมูลเกี่ยวกับผู้ใช้ที่ลงชื่อเข้าใช้
สร้าง Listener โดยใช้คลาสนามธรรม firebase::auth::AuthStateListener
ตัวอย่างเช่น หากต้องการสร้าง Listener ที่ได้รับข้อมูลเกี่ยวกับผู้ใช้เมื่อผู้ใช้ลงชื่อเข้าใช้สำเร็จ ให้ทำดังนี้
class MyAuthStateListener : public firebase::auth::AuthStateListener {
public:
void OnAuthStateChanged(firebase::auth::Auth* auth) override {
firebase::auth::User user = auth.current_user();
if (user.is_valid()) {
// User is signed in
printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
const std::string displayName = user.DisplayName();
const std::string emailAddress = user.Email();
const std::string photoUrl = user.PhotoUrl();
} else {
// User is signed out
printf("OnAuthStateChanged: signed_out\n");
}
// ...
}
};
แนบ Listener ด้วยเมธอด AddAuthStateListener
ของ firebase::auth::Auth
:
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);
ขั้นตอนถัดไป
เรียนรู้วิธีเพิ่มการสนับสนุนสำหรับผู้ให้บริการข้อมูลประจำตัวรายอื่นและบัญชีผู้เยี่ยมชมที่ไม่ระบุชื่อ: