สร้างผู้ใช้
คุณสร้างผู้ใช้ใหม่ในโปรเจ็กต์ Firebase ได้ 4 วิธี ดังนี้
- เรียกใช้เมธอด
createUserWithEmailAndPassword()
- ลงชื่อเข้าใช้ผู้ใช้เป็นครั้งแรกโดยใช้ผู้ให้บริการข้อมูลประจำตัวแบบรวมศูนย์ เช่น Google Sign-In, เข้าสู่ระบบ Facebook หรือ Apple
คุณยังสร้างผู้ใช้ที่ตรวจสอบสิทธิ์ด้วยรหัสผ่านใหม่ได้จากส่วนการตรวจสอบสิทธิ์ของคอนโซล Firebase ในหน้าผู้ใช้
รับโปรไฟล์ของผู้ใช้
หากต้องการดูข้อมูลโปรไฟล์ของผู้ใช้ ให้ใช้พร็อพเพอร์ตี้ของ User
การรับออบเจ็กต์ User
ที่แสดงถึงผู้ใช้ปัจจุบันทำได้ 3 วิธี ดังนี้
สตรีม
authStateChanges
,idTokenChanges
และuserChanges
: ผู้ฟังจะได้รับUser
ปัจจุบัน หรือnull
หากไม่มีการตรวจสอบสิทธิ์ผู้ใช้FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
เมื่อแอปเริ่มทำงาน ระบบจะเริ่มทำงานเหตุการณ์หลังจากที่กู้คืนข้อมูลเข้าสู่ระบบของผู้ใช้ (หากมี) จากพื้นที่เก็บข้อมูลในเครื่องแล้ว ซึ่งหมายความว่าจะมีการเรียก Listener เสมอเมื่อเริ่มสถานะผู้ใช้ จากนั้นเมื่อสถานะการตรวจสอบสิทธิ์เปลี่ยนแปลง ระบบจะสร้างเหตุการณ์ใหม่ด้วยสถานะผู้ใช้ที่อัปเดตแล้ว
การฟังสถานะการตรวจสอบสิทธิ์จะช่วยให้คุณสร้างอินเทอร์เฟซผู้ใช้ที่ตอบสนองต่อการเปลี่ยนแปลงเหล่านี้ในสถานะการตรวจสอบสิทธิ์ได้
ออบเจ็กต์
UserCredential
ที่แสดงผลโดยวิธีการตรวจสอบสิทธิ์ (signIn
-): ออบเจ็กต์UserCredential
มีพร็อพเพอร์ตี้user
ที่มีUser
ปัจจุบันดังนี้final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);
พร็อพเพอร์ตี้
currentUser
ของอินสแตนซ์FirebaseAuth
: หากแน่ใจว่าผู้ใช้ลงชื่อเข้าใช้อยู่ คุณสามารถเข้าถึงUser
ได้จากพร็อพเพอร์ตี้currentUser
ดังนี้if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }
currentUser
อาจnull
ได้ด้วยเหตุผล 2 ข้อดังนี้- ผู้ใช้ไม่ได้ลงชื่อเข้าใช้
- ออบเจ็กต์การตรวจสอบสิทธิ์ยังเริ่มต้นไม่เสร็จสิ้น หากคุณใช้ Listener เพื่อติดตามสถานะการลงชื่อเข้าใช้ของผู้ใช้ คุณไม่จำเป็นต้องจัดการกับกรณีนี้
รับข้อมูลโปรไฟล์เฉพาะผู้ให้บริการของผู้ใช้
หากต้องการดึงข้อมูลโปรไฟล์จากผู้ให้บริการการลงชื่อเข้าใช้ที่ลิงก์กับผู้ใช้ ให้ใช้พร็อพเพอร์ตี้ providerData
ตัวอย่างเช่น
if (user != null) {
for (final providerProfile in user.providerData) {
// ID of the provider (google.com, apple.com, etc.)
final provider = providerProfile.providerId;
// UID specific to the provider
final uid = providerProfile.uid;
// Name, email address, and profile photo URL
final name = providerProfile.displayName;
final emailAddress = providerProfile.email;
final profilePhoto = providerProfile.photoURL;
}
}
อัปเดตโปรไฟล์ของผู้ใช้
คุณสามารถอัปเดตข้อมูลโปรไฟล์ของผู้ใช้ เช่น ชื่อที่แสดงและ URL ของรูปโปรไฟล์ โดยใช้เมธอด update
ตัวอย่างเช่น
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
ตั้งค่าอีเมลของผู้ใช้
คุณจะตั้งค่าอีเมลของผู้ใช้ได้โดยใช้เมธอด updateEmail()
ตัวอย่างเช่น
await user?.updateEmail("janeq@example.com");
ส่งอีเมลยืนยันให้ผู้ใช้
คุณส่งอีเมลยืนยันที่อยู่ให้กับผู้ใช้ได้ด้วยเมธอด sendEmailVerification()
ตัวอย่างเช่น
await user?.sendEmailVerification();
คุณปรับแต่งเทมเพลตอีเมลที่ใช้ในส่วนการตรวจสอบสิทธิ์ของคอนโซล Firebase ได้ในหน้าเทมเพลตอีเมล ดูเทมเพลตอีเมลใน ศูนย์ช่วยเหลือ Firebase
คุณอาจส่งผ่านสถานะผ่าน URL ต่อไปเพื่อเปลี่ยนเส้นทางกลับไปยังแอปเมื่อส่งอีเมลยืนยัน
นอกจากนี้ คุณยังแปลอีเมลยืนยันได้ด้วยการอัปเดตรหัสภาษาในอินสแตนซ์การตรวจสอบสิทธิ์ก่อนส่งอีเมล ตัวอย่างเช่น
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
ตั้งรหัสผ่านของผู้ใช้
คุณตั้งรหัสผ่านของผู้ใช้ได้โดยใช้เมธอด updatePassword()
ตัวอย่างเช่น
await user?.updatePassword(newPassword);
ส่งอีเมลรีเซ็ตรหัสผ่าน
คุณส่งอีเมลการรีเซ็ตรหัสผ่านไปยังผู้ใช้ได้โดยใช้เมธอด sendPasswordResetEmail()
ตัวอย่างเช่น
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
คุณปรับแต่งเทมเพลตอีเมลที่ใช้ในส่วนการตรวจสอบสิทธิ์ของคอนโซล Firebase ได้ในหน้าเทมเพลตอีเมล ดูเทมเพลตอีเมลใน ศูนย์ช่วยเหลือ Firebase
นอกจากนี้ยังอาจส่งสถานะผ่าน URL ต่อไปเพื่อเปลี่ยนเส้นทางกลับไปยังแอปเมื่อส่งอีเมลรีเซ็ตรหัสผ่านได้ด้วย
นอกจากนี้ คุณยังแปลอีเมลรีเซ็ตรหัสผ่านได้ด้วยการอัปเดตรหัสภาษาในอินสแตนซ์การตรวจสอบสิทธิ์ก่อนส่งอีเมล ตัวอย่างเช่น
await FirebaseAuth.instance.setLanguageCode("fr");
คุณส่งอีเมลรีเซ็ตรหัสผ่านจากคอนโซล Firebase ได้ด้วย
ลบผู้ใช้
คุณลบบัญชีผู้ใช้ได้ด้วยเมธอด delete()
ตัวอย่างเช่น
await user?.delete();
คุณยังลบผู้ใช้จากส่วนการตรวจสอบสิทธิ์ของคอนโซล Firebase ในหน้าผู้ใช้ได้ด้วย
ตรวจสอบสิทธิ์ผู้ใช้อีกครั้ง
ผู้ใช้เพิ่งลงชื่อเข้าใช้เพื่อดำเนินการที่มีความละเอียดอ่อนด้านความปลอดภัย เช่น การลบบัญชี การตั้งค่าที่อยู่อีเมลหลัก และการเปลี่ยนรหัสผ่าน หากคุณดำเนินการอย่างใดอย่างหนึ่งข้างต้นและผู้ใช้ลงชื่อเข้าใช้นานเกินไป การดำเนินการจะไม่สำเร็จและโยน FirebaseAuthException
ที่มีโค้ด requires-recent-login
ออกไป
ในกรณีนี้ ให้ตรวจสอบสิทธิ์ผู้ใช้อีกครั้งโดยรับข้อมูลเข้าสู่ระบบใหม่สำหรับลงชื่อเข้าใช้จากผู้ใช้ แล้วส่งข้อมูลเข้าสู่ระบบไปให้ reauthenticate
ตัวอย่างเช่น
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
นำเข้าบัญชีผู้ใช้
คุณนำเข้าบัญชีผู้ใช้จากไฟล์ไปยังโปรเจ็กต์ Firebase ได้โดยใช้คำสั่ง auth:import
ของ Firebase CLI ตัวอย่างเช่น
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14