สร้างผู้ใช้
คุณสร้างผู้ใช้ใหม่ในโปรเจ็กต์ Firebase ของคุณได้สี่วิธี:
- เรียกเมธอด
createUserWithEmailAndPassword()
- ลงชื่อเข้าใช้ผู้ใช้เป็นครั้งแรกโดยใช้ ผู้ให้บริการข้อมูลประจำตัวแบบรวมศูนย์ เช่น Google Sign-In, การเข้าสู่ระบบด้วย Facebook หรือ Apple
คุณยังสามารถสร้างผู้ใช้ที่ตรวจสอบรหัสผ่านใหม่ได้จากส่วนการตรวจสอบสิทธิ์ของ คอนโซล Firebase ในหน้าผู้ใช้
รับโปรไฟล์ของผู้ใช้
หากต้องการรับข้อมูลโปรไฟล์ของผู้ใช้ ให้ใช้คุณสมบัติของ User
มีสามวิธีในการรับออบเจ็กต์ User
ที่แสดงถึงผู้ใช้ปัจจุบัน:
สตรีม
authStateChanges
,idTokenChanges
และuserChanges
: ผู้ฟังของคุณจะได้รับUser
ปัจจุบัน หรือเป็นnull
หากไม่มีผู้ใช้ได้รับการรับรองความถูกต้อง:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
เมื่อแอปเริ่มทำงาน เหตุการณ์จะเริ่มทำงานหลังจากกู้คืนข้อมูลรับรองผู้ใช้ (ถ้ามี) จากที่จัดเก็บในเครื่องแล้ว ซึ่งหมายความว่าผู้ฟังของคุณจะถูกเรียกเสมอเมื่อมีการเตรียมใช้งานสถานะผู้ใช้ จากนั้นเมื่อใดก็ตามที่สถานะการรับรองความถูกต้องเปลี่ยนแปลง เหตุการณ์ใหม่จะปรากฏขึ้นพร้อมกับสถานะผู้ใช้ที่อัปเดต
ด้วยการฟังสถานะการรับรองความถูกต้อง คุณสามารถสร้างอินเทอร์เฟซผู้ใช้ที่ตอบสนองต่อการเปลี่ยนแปลงเหล่านี้ในสถานะการรับรองความถูกต้องได้
วัตถุ
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
ด้วยเหตุผลสองประการ:- ผู้ใช้ไม่ได้ลงชื่อเข้าใช้
- วัตถุการรับรองความถูกต้องยังเตรียมใช้งานไม่เสร็จ หากคุณใช้ 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 ดำเนินการต่อ เพื่อเปลี่ยนเส้นทางกลับไปยังแอปเมื่อส่งอีเมลรีเซ็ตรหัสผ่าน
นอกจากนี้ คุณยังสามารถแปลอีเมลรีเซ็ตรหัสผ่านเป็นภาษาท้องถิ่นได้โดยการอัปเดตรหัสภาษาบนอินสแตนซ์ Auth ก่อนที่จะส่งอีเมล ตัวอย่างเช่น:
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