Bắt đầu với Xác thực Firebase trên Flutter

Kết nối ứng dụng của bạn với Firebase

Cài đặt và khởi chạy SDK Firebase cho Flutter nếu bạn chưa làm như vậy.

Thêm xác thực Firebase vào ứng dụng của bạn

  1. Từ thư mục gốc của dự án Flutter của bạn, hãy chạy lệnh sau để cài đặt plugin:

    flutter pub add firebase_auth
    
  2. Sau khi hoàn tất, hãy xây dựng lại ứng dụng Flutter của bạn:

    flutter run
    
  3. Nhập plugin vào mã Dart của bạn:

    import 'package:firebase_auth/firebase_auth.dart';
    

Để sử dụng nhà cung cấp xác thực, bạn cần kích hoạt nó trong bảng điều khiển Firebase . Đi tới trang Phương thức đăng nhập trong phần Xác thực Firebase để bật đăng nhập Email/Mật khẩu và bất kỳ nhà cung cấp danh tính nào khác mà bạn muốn cho ứng dụng của mình.

(Tùy chọn) Nguyên mẫu và thử nghiệm với Bộ mô phỏng cục bộ Firebase

Trước khi nói về cách ứng dụng của bạn xác thực người dùng, hãy giới thiệu một bộ công cụ bạn có thể sử dụng để tạo nguyên mẫu và kiểm tra chức năng Xác thực: Bộ mô phỏng cục bộ Firebase. Nếu bạn đang quyết định giữa các kỹ thuật và nhà cung cấp xác thực, hãy thử các mô hình dữ liệu khác nhau với dữ liệu công khai và riêng tư bằng cách sử dụng Quy tắc bảo mật và xác thực Firebase hoặc tạo mẫu thiết kế giao diện người dùng đăng nhập, có thể làm việc cục bộ mà không cần triển khai các dịch vụ trực tiếp có thể là một ý tưởng tuyệt vời .

Trình mô phỏng xác thực là một phần của Bộ mô phỏng cục bộ, cho phép ứng dụng của bạn tương tác với nội dung và cấu hình cơ sở dữ liệu được mô phỏng, cũng như các tài nguyên dự án được mô phỏng (chức năng, cơ sở dữ liệu khác và quy tắc bảo mật) theo tùy chọn của bạn.

Sử dụng trình mô phỏng xác thực chỉ bao gồm một vài bước:

  1. Thêm một dòng mã vào cấu hình thử nghiệm của ứng dụng để kết nối với trình mô phỏng.

  2. Từ thư mục gốc của thư mục dự án cục bộ của bạn, hãy chạy firebase emulators:start .

  3. Sử dụng giao diện người dùng Bộ mô phỏng cục bộ để tạo nguyên mẫu tương tác hoặc API REST của trình mô phỏng xác thực để thử nghiệm không tương tác.

  4. Gọi useAuthEmulator() để chỉ định địa chỉ và cổng của trình mô phỏng:

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

Hướng dẫn chi tiết có sẵn tại Kết nối ứng dụng của bạn với trình mô phỏng xác thực . Để biết thêm thông tin, hãy xem phần giới thiệu Local Emulator Suite .

Bây giờ hãy tiếp tục với cách xác thực người dùng.

Kiểm tra trạng thái xác thực hiện tại

Firebase Auth cung cấp nhiều phương pháp và tiện ích để cho phép bạn tích hợp xác thực an toàn vào ứng dụng Flutter mới hoặc hiện có của mình. Trong nhiều trường hợp, bạn sẽ cần biết về trạng thái xác thực của người dùng, chẳng hạn như họ đăng nhập hay đăng xuất.

Firebase Auth cho phép bạn đăng ký trạng thái này trong thời gian thực thông qua Stream . Sau khi được gọi, luồng sẽ cung cấp sự kiện tức thời về trạng thái xác thực hiện tại của người dùng và sau đó cung cấp các sự kiện tiếp theo bất cứ khi nào trạng thái xác thực thay đổi.

Có ba phương pháp để lắng nghe những thay đổi trạng thái xác thực:

authStateChanges()

Để đăng ký những thay đổi này, hãy gọi phương thức authStateChanges() trên phiên bản FirebaseAuth của bạn:

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

Các sự kiện được kích hoạt khi xảy ra các trường hợp sau:

  • Ngay sau khi người nghe đã được đăng ký.
  • Khi người dùng đăng nhập.
  • Khi người dùng hiện tại đã đăng xuất.

idTokenChanges()

Để đăng ký những thay đổi này, hãy gọi phương thức idTokenChanges() trên phiên bản FirebaseAuth của bạn:

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

Các sự kiện được kích hoạt khi xảy ra các trường hợp sau:

  • Ngay sau khi người nghe đã được đăng ký.
  • Khi người dùng đăng nhập.
  • Khi người dùng hiện tại đã đăng xuất.
  • Khi có thay đổi về mã thông báo của người dùng hiện tại.

userChanges()

Để đăng ký những thay đổi này, hãy gọi phương thức userChanges() trên phiên bản FirebaseAuth của bạn:

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

Các sự kiện được kích hoạt khi xảy ra các trường hợp sau:

  • Ngay sau khi người nghe đã được đăng ký.
  • Khi người dùng đăng nhập.
  • Khi người dùng hiện tại đã đăng xuất.
  • Khi có thay đổi về mã thông báo của người dùng hiện tại.
  • Khi các phương thức sau do FirebaseAuth.instance.currentUser cung cấp được gọi:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Trạng thái xác thực liên tục

SDK Firebase cho tất cả các nền tảng cung cấp hỗ trợ vượt trội để đảm bảo rằng trạng thái xác thực của người dùng được duy trì trong suốt quá trình khởi động lại ứng dụng hoặc tải lại trang.

Trên các nền tảng gốc như Android và iOS, hành vi này không thể định cấu hình được và trạng thái xác thực của người dùng sẽ được duy trì trên thiết bị giữa các lần khởi động lại ứng dụng. Người dùng có thể xóa dữ liệu được lưu trong bộ nhớ đệm của ứng dụng bằng cách sử dụng cài đặt thiết bị, thao tác này sẽ xóa mọi trạng thái hiện có đang được lưu trữ.

Trên nền tảng web, trạng thái xác thực của người dùng được lưu trữ trong IndexedDB . Bạn có thể thay đổi độ bền để lưu trữ dữ liệu trong bộ nhớ cục bộ bằng cách sử dụng Persistence.LOCAL . Nếu được yêu cầu, bạn có thể thay đổi hành vi mặc định này thành chỉ duy trì trạng thái xác thực cho phiên hiện tại hoặc không hề tồn tại. Để định cấu hình các cài đặt này, hãy gọi phương thức sau FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL); . Bạn vẫn có thể cập nhật tính bền vững cho từng phiên bản Auth bằng cách sử dụng 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);

Bước tiếp theo

Khám phá hướng dẫn về cách đăng nhập và đăng ký người dùng bằng các dịch vụ nhận dạng và xác thực được hỗ trợ.