เชื่อมต่อแอปของคุณกับ 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 Security Rules หรือการสร้างต้นแบบการออกแบบ UI การลงชื่อเข้าใช้ ความสามารถในการทำงานในพื้นที่โดยไม่ต้องปรับใช้บริการสดอาจเป็นความคิดที่ดี .
โปรแกรมจำลองการตรวจสอบสิทธิ์เป็นส่วนหนึ่งของ Local Emulator Suite ซึ่งช่วยให้แอปของคุณโต้ตอบกับเนื้อหาและการกำหนดค่าฐานข้อมูลที่จำลองได้ รวมถึงทรัพยากรโปรเจ็กต์ที่จำลอง (ฟังก์ชัน ฐานข้อมูลอื่น และกฎความปลอดภัย)
การใช้โปรแกรมจำลองการรับรองความถูกต้องมีเพียงไม่กี่ขั้นตอน:
การเพิ่มบรรทัดโค้ดลงในการกำหนดค่าทดสอบของแอปเพื่อเชื่อมต่อกับโปรแกรมจำลอง
จากรากของไดเร็กทอรีโปรเจ็กต์ในเครื่องของคุณ ให้รัน
firebase emulators:start
การใช้ Local Emulator Suite 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
เมื่อเรียกแล้ว สตรีมจะจัดเตรียมเหตุการณ์ทันทีของสถานะการตรวจสอบสิทธิ์ปัจจุบันของผู้ใช้ จากนั้นจึงจัดเตรียมเหตุการณ์ที่ตามมาเมื่อใดก็ตามที่สถานะการตรวจสอบสิทธิ์เปลี่ยนแปลง
มีสามวิธีในการฟังการเปลี่ยนแปลงสถานะการรับรองความถูกต้อง:
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);
ขั้นตอนถัดไป
สำรวจคำแนะนำเกี่ยวกับการลงชื่อเข้าใช้และการลงทะเบียนผู้ใช้ด้วยบริการระบุตัวตนและการรับรองความถูกต้องที่รองรับ