สร้างผู้ใช้
คุณสร้างผู้ใช้ใหม่ในโปรเจ็กต์ Firebase ได้ 4 วิธีดังนี้
- เรียกใช้เมธอด
createUserWithEmailAndPassword()
- ลงชื่อเข้าใช้ผู้ใช้เป็นครั้งแรกโดยใช้ผู้ให้บริการข้อมูลประจำตัวแบบรวม เช่น Google Sign-In, Facebook Login หรือ Apple
นอกจากนี้ คุณยังสร้างผู้ใช้ที่ตรวจสอบสิทธิ์ด้วยรหัสผ่านใหม่ได้จากส่วนการตรวจสอบสิทธิ์ ของคอนโซล Firebase ในหน้าผู้ใช้
รับโปรไฟล์ของผู้ใช้
หากต้องการดูข้อมูลโปรไฟล์ของผู้ใช้ ให้ใช้พร็อพเพอร์ตี้ของ User
คุณรับออบเจ็กต์ User
ที่แสดงผู้ใช้ปัจจุบันได้ 3 วิธีดังนี้
สตรีม
authStateChanges
,idTokenChanges
และuserChanges
: ผู้ฟังจะได้รับUser
ปัจจุบัน หรือnull
หากไม่มีผู้ใช้ ที่ได้รับการตรวจสอบสิทธิ์FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
เมื่อแอปเริ่มต้น ระบบจะทริกเกอร์เหตุการณ์หลังจากที่กู้คืนข้อมูลเข้าสู่ระบบของผู้ใช้ (หากมี) จาก พื้นที่เก็บข้อมูลในเครื่องแล้ว ซึ่งหมายความว่า Listener จะได้รับการเรียกใช้เสมอเมื่อมีการเริ่มต้นสถานะผู้ใช้ จากนั้นเมื่อใดก็ตามที่สถานะการตรวจสอบสิทธิ์ มีการเปลี่ยนแปลง ระบบจะสร้างเหตุการณ์ใหม่พร้อมสถานะผู้ใช้ที่อัปเดตแล้ว
การฟังสถานะการตรวจสอบสิทธิ์ช่วยให้คุณสร้างอินเทอร์เฟซผู้ใช้ที่ ตอบสนองต่อการเปลี่ยนแปลงสถานะการตรวจสอบสิทธิ์เหล่านี้ได้ อย่าวาง
authStateChanges().listen(...)
ไว้ในเมธอด build ของวิดเจ็ตโดยตรง เนื่องจากจะสร้างการสมัครใช้บริการใหม่ทุกครั้งที่มีการสร้างใหม่ หากต้องการอัปเดต UI เพื่อตอบสนองต่อสถานะการตรวจสอบสิทธิ์ ให้ใช้StreamBuilder
StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: 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
ได้จาก 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 ดำเนินการต่อเพื่อเปลี่ยนเส้นทางกลับ ไปยังแอปเมื่อส่งอีเมลยืนยันได้ด้วย
นอกจากนี้ คุณยังแปลอีเมลยืนยันเป็นภาษาท้องถิ่นได้โดยการอัปเดตรหัสภาษาในอินสแตนซ์ Auth ก่อนส่งอีเมล เช่น
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