จัดการผู้ใช้ใน Firebase

สร้างผู้ใช้

คุณสามารถสร้างผู้ใช้ใหม่ในโครงการ Firebase คุณในสี่วิธี:

นอกจากนี้คุณยังสามารถสร้างผู้ใช้รหัสผ่านรับรองความถูกต้องใหม่จากส่วนรับรองความถูกต้องของ 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 เหตุผลสองประการคือ

    • ผู้ใช้ไม่ได้ลงนามใน
    • วัตถุรับรองความถูกต้องยังไม่ได้ดำเนินการเสร็จสิ้นการเริ่มต้น ถ้าคุณใช้ฟังเพื่อติดตามของผู้ใช้เข้าสู่ระบบในสถานะที่คุณไม่จำเป็นที่จะจัดการกับกรณีนี้

ได้รับข้อมูลรายละเอียดของผู้ให้บริการที่เฉพาะเจาะจงของผู้ใช้

เพื่อให้ได้ข้อมูลรายละเอียดที่ได้รับจากการเข้าสู่ระบบในผู้ให้บริการที่เชื่อมโยงกับผู้ใช้ให้ใช้ 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 คอนโซล บนหน้าผู้ใช้

Re-รับรองความถูกต้องของผู้ใช้

บางคนที่มีความสำคัญการรักษาความปลอดภัยการกระทำเช่น การลบบัญชี , การตั้งค่าที่อยู่อีเมลหลัก และ เปลี่ยนรหัสผ่าน -require ว่าผู้ใช้มีการลงนามในเร็ว ๆ นี้. ถ้าคุณดำเนินการอย่างใดอย่างหนึ่งของการกระทำเหล่านี้และผู้ใช้ที่ลงนามในนานเกินไปที่ผ่านมา การดำเนินการล้มเหลวและพ่น FirebaseAuthException มีรหัส requires-recent-login เมื่อเกิดเหตุการณ์นี้ reauthenticate ผู้ใช้โดยการลงชื่อเข้าใช้ใหม่ข้อมูลประจำตัวจากผู้ใช้และผ่านข้อมูลประจำตัวที่ reauthenticate ตัวอย่างเช่น:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

บัญชีผู้ใช้นำเข้า

คุณสามารถนำเข้าบัญชีผู้ใช้จากไฟล์ในโครงการ Firebase ของคุณโดยใช้ Firebase CLI ของ auth:import คำสั่ง ตัวอย่างเช่น:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14