เชื่อมต่อแอปของคุณกับ 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 หากคุณกำลังตัดสินใจเลือกเทคนิคการตรวจสอบสิทธิ์และผู้ให้บริการ ลองใช้โมเดลข้อมูลต่างๆ กับข้อมูลสาธารณะและส่วนตัวโดยใช้ Authentication และ Firebase Security Rules หรือการออกแบบ UI ในการลงชื่อเข้าใช้ต้นแบบ ความสามารถในการทำงานในพื้นที่โดยไม่ต้องใช้บริการสดอาจเป็นแนวคิดที่ดี .
โปรแกรมจำลองการตรวจสอบสิทธิ์เป็นส่วนหนึ่งของ Local Emulator Suite ซึ่งช่วยให้แอปของคุณสามารถโต้ตอบกับเนื้อหาและการกำหนดค่าฐานข้อมูลที่จำลองได้ รวมถึงทรัพยากรโครงการจำลอง (ฟังก์ชัน ฐานข้อมูลอื่นๆ และกฎความปลอดภัย)
การใช้โปรแกรมจำลองการตรวจสอบสิทธิ์มีเพียงไม่กี่ขั้นตอน:
การเพิ่มบรรทัดโค้ดในการกำหนดค่าการทดสอบของแอปเพื่อเชื่อมต่อกับโปรแกรมจำลอง
จากรูทของไดเร็กทอรีโปรเจ็กต์ในเครื่องของคุณ ให้รัน
firebase emulators:start
การใช้ Local Emulator Suite UI สำหรับการสร้างต้นแบบแบบโต้ตอบ หรือ Authentication emulator REST API สำหรับการทดสอบแบบไม่โต้ตอบ
โทร
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!');
}
});
เหตุการณ์จะถูกไล่ออกเมื่อสิ่งต่อไปนี้เกิดขึ้น:
- ทันทีหลังจากที่ผู้ฟังได้รับการลงทะเบียนแล้ว
- เมื่อผู้ใช้ลงชื่อเข้าใช้
- เมื่อผู้ใช้ปัจจุบันออกจากระบบ
- เมื่อมีการเปลี่ยนแปลงโทเค็นของผู้ใช้ปัจจุบัน
- ผู้ใช้ลงชื่อเข้าใช้หรือตรวจสอบอีกครั้งหลังจากแก้ไขการอ้างสิทธิ์ที่กำหนดเอง โทเค็น ID ที่ออกตามผลลัพธ์จะมีการอ้างสิทธิ์ล่าสุด
- เซสชันผู้ใช้ที่มีอยู่ได้รับการรีเฟรชโทเค็น ID หลังจากโทเค็นเก่าหมดอายุ
- โทเค็น ID ถูกบังคับให้รีเฟรชโดยการเรียก
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
สำหรับรายละเอียดเพิ่มเติม โปรดดู ที่การเผยแพร่การอ้างสิทธิ์ที่กำหนดเองไปยังลูกค้า
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()
-
idTokenChanges()
, userChanges()
& authStateChanges()
จะไม่เริ่มทำงานหากคุณปิดใช้งานหรือลบ User
ด้วย Firebase Admin SDK หรือคอนโซล Firebase คุณจะต้องบังคับให้โหลดซ้ำโดยใช้ FirebaseAuth.instance.currentUser.reload()
ซึ่งจะทำให้เกิดข้อยกเว้นที่ user-disabled
หรือ user-not-found
ซึ่งคุณสามารถตรวจจับและจัดการในโค้ดของแอปได้
สถานะการตรวจสอบสิทธิ์อย่างต่อเนื่อง
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);
ขั้นตอนถัดไป
สำรวจคำแนะนำในการลงชื่อเข้าใช้และลงทะเบียนผู้ใช้ด้วยบริการระบุตัวตนและการรับรองความถูกต้องที่รองรับ