เชื่อมต่อแอปกับ Firebase
ติดตั้งและเริ่มต้นใช้งาน Firebase SDK สำหรับ Flutter หากยังไม่ได้ดำเนินการ
เพิ่มการตรวจสอบสิทธิ์ Firebase ไปยังแอป
- จากรูทของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง ปลั๊กอิน - flutter pub add firebase_auth
- เมื่อเสร็จแล้ว ให้สร้างแอปพลิเคชัน Flutter ใหม่โดยทำดังนี้ - flutter run
- นำเข้าปลั๊กอินในโค้ด Dart - import 'package:firebase_auth/firebase_auth.dart';
หากต้องการใช้ผู้ให้บริการตรวจสอบสิทธิ์ คุณต้องเปิดใช้ในคอนโซล Firebase ไปที่หน้าวิธีการลงชื่อเข้าใช้ในส่วนการตรวจสอบสิทธิ์ Firebase เพื่อเปิดใช้การลงชื่อเข้าใช้ด้วยอีเมล/รหัสผ่านและผู้ให้บริการข้อมูลประจำตัวอื่นๆ ที่ต้องการสำหรับแอป
(ไม่บังคับ) สร้างต้นแบบและทดสอบด้วย Firebase Local Emulator Suite
ก่อนจะพูดถึงวิธีที่แอปตรวจสอบสิทธิ์ผู้ใช้ เรามาทำความรู้จักชุดเครื่องมือที่คุณใช้สร้างต้นแบบและทดสอบฟังก์ชันการตรวจสอบสิทธิ์ได้กันก่อน Firebase Local Emulator Suite หากคุณกำลังตัดสินใจเลือกเทคนิคการตรวจสอบสิทธิ์ และผู้ให้บริการ ลองใช้โมเดลข้อมูลต่างๆ กับข้อมูลสาธารณะและข้อมูลส่วนตัว โดยใช้การตรวจสอบสิทธิ์และกฎความปลอดภัยของ Firebase หรือสร้างต้นแบบการออกแบบ UI การลงชื่อเข้าใช้ การทำงานในเครื่องโดยไม่ต้องติดตั้งใช้งานบริการจริงอาจเป็นไอเดียที่ดี
โปรแกรมจำลองการตรวจสอบสิทธิ์เป็นส่วนหนึ่งของชุดโปรแกรมจำลองภายใน ซึ่งช่วยให้แอปโต้ตอบกับเนื้อหาและการกำหนดค่าฐานข้อมูลจำลองได้ รวมถึงทรัพยากรโปรเจ็กต์จำลอง (ฟังก์ชัน ฐานข้อมูลอื่นๆ และกฎการรักษาความปลอดภัย) ได้ด้วย (ไม่บังคับ)
การใช้โปรแกรมจำลองการตรวจสอบสิทธิ์มีเพียงไม่กี่ขั้นตอน ดังนี้
- การเพิ่มบรรทัดโค้ดลงในการกำหนดค่าการทดสอบของแอปเพื่อเชื่อมต่อกับโปรแกรมจำลอง 
- จากรูทของไดเรกทอรีโปรเจ็กต์ในเครื่อง ให้เรียกใช้ - firebase emulators:start
- การใช้ UI ของชุดโปรแกรมจำลองภายในสำหรับการสร้างต้นแบบแบบอินเทอร์แอกทีฟ หรือ REST API ของโปรแกรมจำลองการตรวจสอบสิทธิ์สำหรับการทดสอบแบบไม่โต้ตอบ 
- เรียกใช้ - 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);
ขั้นตอนถัดไป
ดูคำแนะนำเกี่ยวกับการลงชื่อเข้าใช้และการลงชื่อสมัครใช้ของผู้ใช้ด้วยบริการระบุตัวตนและการตรวจสอบสิทธิ์ที่รองรับ