Bắt đầu sử dụng Xác thực Firebase trên Flutter

Kết nối ứng dụng với Firebase

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

Thêm Xác thực Firebase vào ứng dụng

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

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

    flutter run
    
  3. Nhập trình bổ trợ vào mã Dart:

    import 'package:firebase_auth/firebase_auth.dart';
    

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

(Không bắt buộc) Tạo nguyên mẫu và kiểm thử bằng Bộ công cụ mô phỏng trên thiết bị của Firebase

Trước khi nói về cách ứng dụng xác thực người dùng, hãy giới thiệu một bộ công cụ mà bạn có thể dùng để tạo nguyên mẫu và kiểm thử chức năng Xác thực: Bộ công cụ mô phỏng trên thiết bị của Firebase. Nếu bạn đang quyết định chọn kỹ thuật và trình cung cấp dịch vụ xác thực, 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 Xác thực và Quy tắc bảo mật Firebase hoặc tạo nguyên mẫu cho các thiết kế giao diện người dùng đăng nhập, thì việc 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 hay.

Trình mô phỏng Xác thực là một phần của Bộ công cụ mô phỏng trên thiết bị. Bộ công cụ này 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 (hàm, cơ sở dữ liệu khác và quy tắc bảo mật) (không bắt buộc).

Việc sử dụng trình mô phỏng Xác thực chỉ cần vài bước:

  1. Thêm một dòng mã vào cấu hình kiểm thử 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ộ, hãy chạy firebase emulators:start.

  3. Sử dụng giao diện người dùng Bộ công cụ mô phỏng trên thiết 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 để kiểm thử 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);
    //...
    }
    

Bạn có thể xem hướng dẫn chi tiết tại bài viết Kết nối ứng dụng 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 về Bộ công cụ mô phỏng trên thiết bị.

Bây giờ, hãy tiếp tục tìm hiểu 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 thức và tiện ích để giúp bạn tích hợp tính năng xác thực an toàn vào ứng dụng Flutter mới hoặc hiện có. 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ý theo thời gian thực vào trạng thái này thông qua a Stream. Sau khi được gọi, luồng sẽ cung cấp một sự kiện tức thì về trạng thái xác thực hiện tại của người dùng, 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ó 3 phương thức để theo dõi các thay đổi về trạng thái xác thực:

authStateChanges()

Để đăng ký các thay đổi này, hãy gọi phương thức authStateChanges() trên thực thể FirebaseAuth:

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 những trường hợp sau:

  • Ngay sau khi trình 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ý các thay đổi này, hãy gọi phương thức idTokenChanges() trên thực thể FirebaseAuth:

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 những trường hợp sau:

  • Ngay sau khi trình 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ó sự thay đổi trong mã thông báo của người dùng hiện tại.

userChanges()

Để đăng ký các thay đổi này, hãy gọi phương thức userChanges() trên thực thể FirebaseAuth:

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 những trường hợp sau:

  • Ngay sau khi trình 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ó sự thay đổi trong 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()

Duy trì trạng thái xác thực

SDK Firebase cho tất cả các nền tảng đều cung cấp tính năng hỗ trợ sẵn có để đảm bảo rằng trạng thái xác thực của người dùng được duy trì trên các lần 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, bạn không thể định cấu hình hành vi này 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ể xoá dữ liệu được lưu vào bộ nhớ đệm của ứng dụng bằng cách sử dụng chế độ cài đặt thiết bị. Thao tác này sẽ xoá mọi trạng thái hiện có đang được lưu trữ.

Trên các 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 chế độ duy trì để lưu trữ dữ liệu trong bộ nhớ cục bộ bằng cách sử dụng Persistence.LOCAL. Nếu cần, bạn có thể thay đổi hành vi mặc định này để chỉ duy trì trạng thái xác thực cho phiên hiện tại hoặc không duy trì. Để định cấu hình các chế độ 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 chế độ duy trì cho từng thực thể Xác thực 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);

Các bước tiếp theo

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