查看 2022 年 Google I/O 大会上介绍的 Firebase 新动态。了解详情

เริ่มต้นใช้งานการตรวจสอบสิทธิ์ 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 หากคุณกำลังตัดสินใจเลือกเทคนิคการตรวจสอบสิทธิ์และผู้ให้บริการ ลองใช้โมเดลข้อมูลต่างๆ กับข้อมูลสาธารณะและส่วนตัวโดยใช้ Authentication และ Firebase Security Rules หรือการออกแบบ UI ในการลงชื่อเข้าใช้ต้นแบบ ความสามารถในการทำงานในพื้นที่โดยไม่ต้องใช้บริการสดอาจเป็นแนวคิดที่ดี .

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

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

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

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

  3. การใช้ Local Emulator Suite UI สำหรับการสร้างต้นแบบแบบโต้ตอบ หรือ Authentication emulator REST API สำหรับการทดสอบแบบไม่โต้ตอบ

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

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

มีคำแนะนำโดยละเอียดที่ Connect your app to the Authentication emulator สำหรับข้อมูลเพิ่มเติม โปรดดูที่การ แนะนำ Local Emulator Suite

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

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

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

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

มีสามวิธีในการฟังการเปลี่ยนแปลงสถานะการรับรองความถูกต้อง:

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()

สถานะการตรวจสอบสิทธิ์อย่างต่อเนื่อง

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

บนแพลตฟอร์มดั้งเดิม เช่น 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);

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

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