เริ่มต้นใช้งานการตรวจสอบสิทธิ์ Firebase ใน Flutter

เชื่อมต่อแอปกับ Firebase

ติดตั้งและเริ่มต้น Firebase SDK สำหรับ Flutter หากยังไม่ได้ทำ ดังนั้น

เพิ่มการตรวจสอบสิทธิ์ Firebase ลงในแอป

  1. จากรูทของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง ปลั๊กอิน

    flutter pub add firebase_auth
    
  2. เมื่อดำเนินการเสร็จแล้ว ให้สร้างแอปพลิเคชัน Flutter ใหม่โดยทำดังนี้

    flutter run
    
  3. นำเข้าปลั๊กอินในโค้ด Dart ของคุณดังนี้

    import 'package:firebase_auth/firebase_auth.dart';
    

หากต้องการใช้ผู้ให้บริการการตรวจสอบสิทธิ์ คุณต้องเปิดใช้ในคอนโซล Firebase ไปที่หน้าวิธีการลงชื่อเข้าใช้ในส่วนการตรวจสอบสิทธิ์ Firebase เพื่อเปิดใช้ การลงชื่อเข้าใช้อีเมล/รหัสผ่าน และผู้ให้บริการข้อมูลประจำตัวอื่นๆ ที่คุณต้องการสำหรับแอปของคุณ

(ไม่บังคับ) สร้างต้นแบบและทดสอบด้วย Firebase Local Emulator Suite

ก่อนที่จะพูดถึงวิธีที่แอปตรวจสอบสิทธิ์ผู้ใช้ เรามาแนะนำชุด ที่คุณสามารถใช้เพื่อสร้างต้นแบบและทดสอบฟังก์ชันการตรวจสอบสิทธิ์ ชุดโปรแกรมจำลองภายในของ Firebase ถ้าคุณกำลังตัดสินใจเลือกเทคนิคการตรวจสอบสิทธิ์ และผู้ให้บริการ การทดลองใช้โมเดลข้อมูลที่แตกต่างกัน ด้วยข้อมูลสาธารณะและข้อมูลส่วนตัว โดยใช้การตรวจสอบสิทธิ์และกฎการรักษาความปลอดภัยของ Firebase หรือการสร้างต้นแบบการออกแบบ UI ของการลงชื่อเข้าใช้ การทำงานภายในท้องถิ่นโดยไม่ทำให้บริการแบบสดเป็นความคิดที่ดี

โปรแกรมจำลองการตรวจสอบสิทธิ์เป็นส่วนหนึ่งของชุดโปรแกรมจำลองภายใน ทำให้แอปของคุณโต้ตอบกับเนื้อหาและการกำหนดค่าฐานข้อมูลที่จำลอง เช่น รวมทั้งทรัพยากรโครงการจำลอง (ฟังก์ชัน ฐานข้อมูลอื่นๆ และกฎความปลอดภัย)

การใช้โปรแกรมจำลองการตรวจสอบสิทธิ์มีเพียงไม่กี่ขั้นตอนดังนี้

  1. การเพิ่มบรรทัดโค้ดลงในการกำหนดค่าการทดสอบของแอปเพื่อเชื่อมต่อกับโปรแกรมจำลอง

  2. จากรูทของไดเรกทอรีโปรเจ็กต์ในเครื่องโดยเรียกใช้ firebase emulators:start

  3. การใช้ UI ชุดโปรแกรมจำลองในเครื่องเพื่อสร้างต้นแบบแบบอินเทอร์แอกทีฟ หรือ REST API โปรแกรมจำลองการตรวจสอบสิทธิ์สำหรับการทดสอบแบบไม่โต้ตอบ

  4. เรียกใช้ useAuthEmulator() เพื่อระบุพอร์ตและที่อยู่ของโปรแกรมจำลอง:

    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    
    // Ideal time to initialize
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    //...
    }
    

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

เอาล่ะ มาต่อเกี่ยวกับวิธีตรวจสอบสิทธิ์ผู้ใช้กัน

ตรวจสอบสถานะการตรวจสอบสิทธิ์ปัจจุบัน

Firebase Auth มีวิธีและยูทิลิตีมากมายที่ช่วยให้คุณผสานรวมได้ การตรวจสอบสิทธิ์ที่มีความปลอดภัยในแอปพลิเคชัน Flutter ใหม่หรือที่มีอยู่ของคุณ ในหลายๆ จุด คุณจะต้องทราบเกี่ยวกับสถานะการตรวจสอบสิทธิ์ของผู้ใช้ เช่น พวกเขาลงชื่อเข้าสู่ระบบหรือออกจากระบบแล้ว

Firebase Auth ให้คุณสมัครรับข้อมูลสถานะนี้แบบเรียลไทม์ผ่าน Stream. เมื่อเรียกใช้ สตรีมจะแสดงเหตุการณ์ปัจจุบันของผู้ใช้ทันที สถานะการตรวจสอบสิทธิ์ แล้วจะระบุเหตุการณ์หลังจากนั้นทุกเมื่อ สถานะการตรวจสอบสิทธิ์จะเปลี่ยนไป

การฟังการเปลี่ยนแปลงสถานะการตรวจสอบสิทธิ์ทำได้ 3 วิธีดังนี้

authStateChanges()

หากต้องการสมัครรับข้อมูลการเปลี่ยนแปลงเหล่านี้ ให้เรียกเมธอด authStateChanges() ใน อินสแตนซ์ FirebaseAuth:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

เหตุการณ์จะเริ่มทำงานเมื่อเกิดเหตุการณ์ต่อไปนี้

  • หลังจากที่ลงทะเบียน Listener แล้ว
  • เมื่อผู้ใช้ลงชื่อเข้าใช้
  • เมื่อผู้ใช้ปัจจุบันออกจากระบบ

idTokenChanges()

หากต้องการสมัครรับข้อมูลการเปลี่ยนแปลงเหล่านี้ ให้เรียกเมธอด idTokenChanges() ใน อินสแตนซ์ FirebaseAuth:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

เหตุการณ์จะเริ่มทำงานเมื่อเกิดเหตุการณ์ต่อไปนี้

  • หลังจากที่ลงทะเบียน Listener แล้ว
  • เมื่อผู้ใช้ลงชื่อเข้าใช้
  • เมื่อผู้ใช้ปัจจุบันออกจากระบบ
  • เมื่อโทเค็นของผู้ใช้ปัจจุบันเปลี่ยนแปลง

userChanges()

หากต้องการสมัครรับข้อมูลการเปลี่ยนแปลงเหล่านี้ ให้เรียกเมธอด userChanges() ใน อินสแตนซ์ FirebaseAuth:

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

เหตุการณ์จะเริ่มทำงานเมื่อเกิดเหตุการณ์ต่อไปนี้

  • หลังจากที่ลงทะเบียน Listener แล้ว
  • เมื่อผู้ใช้ลงชื่อเข้าใช้
  • เมื่อผู้ใช้ปัจจุบันออกจากระบบ
  • เมื่อโทเค็นของผู้ใช้ปัจจุบันเปลี่ยนแปลง
  • เมื่อมีการเรียกเมธอดต่อไปนี้จาก FirebaseAuth.instance.currentUser
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

สถานะการตรวจสอบสิทธิ์ที่คงอยู่

Firebase SDK สำหรับทุกแพลตฟอร์มให้การรองรับในตัวเพื่อให้มั่นใจว่า สถานะการตรวจสอบสิทธิ์ของผู้ใช้จะยังคงอยู่ตลอดการรีสตาร์ทแอปหรือหน้าเว็บ โหลดซ้ำ

บนแพลตฟอร์มดั้งเดิม เช่น Android และ iOS ไม่สามารถกำหนดค่าลักษณะการทำงานนี้ และสถานะการตรวจสอบสิทธิ์ของผู้ใช้จะยังคงอยู่ในอุปกรณ์ระหว่างแอป รีสตาร์ท ผู้ใช้สามารถล้างข้อมูลของแอปที่แคชไว้โดยใช้การตั้งค่าอุปกรณ์ ซึ่งจะล้างสถานะที่มีอยู่ซึ่งกำลังจัดเก็บไว้

ในแพลตฟอร์มบนเว็บ ระบบจะเก็บสถานะการตรวจสอบสิทธิ์ของผู้ใช้ไว้ใน IndexedDB คุณสามารถเปลี่ยนการคงอยู่เพื่อเก็บข้อมูลในพื้นที่เก็บข้อมูลในเครื่อง โดยใช้ Persistence.LOCAL หากจำเป็น คุณสามารถเปลี่ยนลักษณะการทำงานเริ่มต้นให้คงไว้เฉพาะ สถานะการตรวจสอบสิทธิ์สำหรับเซสชันปัจจุบัน หรือไม่มีเลย ในการกำหนดค่า การตั้งค่า เรียกเมธอดต่อไปนี้ FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); คุณยังคงอัปเดตการถาวรสำหรับอินสแตนซ์การตรวจสอบสิทธิ์แต่ละรายการได้โดยใช้ setPersistence(Persistence.NONE)

// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);

ขั้นตอนถัดไป

ดูคำแนะนำในการลงชื่อเข้าใช้และลงชื่อสมัครใช้สำหรับผู้ใช้ด้วย Identity และการตรวจสอบสิทธิ์