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 bật nhà cung cấp này trong bảng điều khiển Firebase . Truy cập trang Phương pháp đă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 Firebase Local Emulator Suite

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 mẫu và thử nghiệm chức năng Xác thực: Firebase Local Emulator Suite. Nếu bạn đang quyết định giữa các kỹ thuật xác thực và nhà cung cấp, 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 Quy tắc xác thực và bảo mật 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 dịch vụ trực tiếp có thể là một ý tưởng tuyệt vời .

Trình giả lập 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 cấu hình và nội dung cơ sở dữ liệu được mô phỏng, cũng như tùy chọn các tài nguyên dự án được mô phỏng của bạn (chức năng, cơ sở dữ liệu khác và quy tắc bảo mật).

Sử dụng trình giả lập 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, 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 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 trình giả lập:

    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 giả lập 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ờ chúng ta 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 qua Stream . Sau khi được gọi, luồng cung cấp một sự kiện ngay lập tức 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 các 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!');
    }
  });

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

  • 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!');
    }
  });

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

  • 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ó sự thay đổi trong 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!');
    }
  });

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

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

Trạng thái xác thực tồn tại

SDK Firebase cho tất cả các nền tảng cung cấp hỗ trợ ngoài hộp để đảm bảo rằng trạng thái xác thực của người dùng của bạn được duy trì khi 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 và trạng thái xác thực của người dùng sẽ vẫn tồn tại 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 đã lưu trong bộ nhớ cache 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 để 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 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 độ bền cho từng cá thể Auth bằ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á các hướng dẫn về đăng nhập và đăng ký người dùng với các dịch vụ xác thực và nhận dạng được hỗ trợ.