Bắt đầu 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 Firebase SDK cho Flutter nếu bạn chưa thực hiện vì vậy.

Thêm tính năng 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 tạo lại ứng dụng Flutter:

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

    import 'package:firebase_auth/firebase_auth.dart';
    

Để sử dụng một nhà cung cấp dịch vụ xác thực, bạn cần bật 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 Đăng nhập bằng email/mật khẩu và mọi nhà cung cấp danh tính khác mà bạn muốn cho ứng dụng của mình.

(Không bắt buộc) Tạo nguyên mẫu và thử nghiệm bằng Bộ mô phỏng cục bộ của 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 số 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ộ của Firebase. Nếu bạn đang quyết định chọn các kỹ thuật xác thực và nhà cung cấp, 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 Firebase và Xác thực hoặc tạo nguyên mẫu cho 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 triển khai dịch vụ trực tiếp có thể là ý 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 cục bộ, cho phép ứng dụng của bạn tương tác với cấu hình và nội dung cơ sở dữ liệu được mô phỏng, như cũng như các tài nguyên dự án được mô phỏng (không bắt buộc) (các hàm, cơ sở dữ liệu khác, và quy tắc bảo mật).

Việc 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 kiểm thử của ứng dụng để kết nối với trình mô phỏng.

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

  3. Sử dụng giao diện người dùng Bộ công cụ 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 để 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 Giới thiệu về Bộ công cụ mô phỏng cục bộ.

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

Tính năng Xác thực Firebase cung cấp nhiều phương thức và tiện ích để cho phép bạn tích hợp xác thực bảo mật vào ứng dụng Flutter mới hoặc hiện có của bạn. Trong nhiều trong trường hợp xác thực, 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.

Xác thực Firebase cho phép bạn đăng ký trạng thái này theo thời gian thực thông qua Stream. Sau khi được gọi, luồng sẽ cung cấp một sự kiện ngay lập tức liên quan đến hoạt động hiện tại của người dùng trạng thái xác thực, rồi 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 sẽ thay đổi.

Có 3 phương pháp để theo dõi các thay đổi về trạng thái xác thực:

authStateChanges()

Để đăng ký nhận những 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!');
    }
  });

Sự kiện được kích hoạt khi những điều sau xảy ra:

  • 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ý nhận những 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!');
    }
  });

Sự kiện được kích hoạt khi những điều sau xảy ra:

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

userChanges()

Để đăng ký nhận những 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!');
    }
  });

Sự kiện được kích hoạt khi những điều sau xảy ra:

  • 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ó 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

Firebase SDK hỗ trợ ngay cho tất cả các nền tảng để đảm bảo trạng thái xác thực của người dùng vẫn được duy trì khi ứng dụng khởi động lại hoặc trang tải lại.

Trên các nền tảng gốc như Android & iOS, 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 ứng dụng sẽ khởi động lại. 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 của thiết bị, Thao tác này sẽ xoá sạch 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 dữ liệu cố định để lưu trữ dữ liệu trong bộ nhớ cục bộ đang 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 hoàn toàn không. Để định cấu hình các tham số này cài đặt, 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 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á hướng dẫn về cách đăng nhập và đăng ký người dùng bằng danh tính và xác thực.