เริ่มต้นใช้งานการตรวจสอบสิทธิ์ 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 Local Emulator Suite หากคุณกำลังตัดสินใจเลือกเทคนิคการตรวจสอบสิทธิ์ และผู้ให้บริการ ลองใช้โมเดลข้อมูลต่างๆ กับข้อมูลสาธารณะและข้อมูลส่วนตัว โดยใช้การตรวจสอบสิทธิ์และกฎความปลอดภัยของ 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);
    //...
    }
    

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

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

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

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!');
    }
  });

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

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

idTokenChanges()

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

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

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

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

userChanges()

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

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

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

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

คงสถานะการตรวจสอบสิทธิ์ไว้

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

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

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

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

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