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
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
Sau khi hoàn tất, hãy xây dựng lại ứng dụng Flutter của bạn:
flutter run
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:
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.
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
.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.
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.
- Người dùng đăng nhập hoặc xác thực lại sau khi các xác nhận quyền sở hữu tùy chỉnh được sửa đổi. Do đó, mã thông báo ID được phát hành sẽ chứa các xác nhận quyền sở hữu mới nhất.
- Một phiên người dùng hiện tại được làm mới mã thông báo ID của nó sau khi mã thông báo cũ hơn hết hạn.
- Mã thông báo ID được buộc làm mới bằng cách gọi
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
.
Để biết thêm chi tiết, hãy xem Tuyên truyền xác nhận quyền sở hữu tùy chỉnh cho khách hàng
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()
-
idTokenChanges()
, userChanges()
& authStateChanges()
cũng sẽ không kích hoạt nếu bạn tắt hoặc xóa User
bằng SDK quản trị Firebase hoặc bảng điều khiển Firebase. Bạn sẽ phải buộc tải lại bằng cách sử dụng FirebaseAuth.instance.currentUser.reload()
, điều này sẽ gây ra trường user-disabled
hoặc user-not-found
ngoại lệ mà bạn có thể bắt và xử lý trong mã ứng dụng của mình.
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ợ.