Trước khi sử dụng trình mô phỏng Authentication với ứng dụng, hãy đảm bảo rằng bạn hiểu quy trình làm việc tổng thể của Firebase Local Emulator Suite, đồng thời cài đặt và định cấu hình Local Emulator Suite cũng như xem lại các lệnh CLI của trình mô phỏng này.
Chủ đề này giả định rằng bạn đã quen thuộc với việc phát triển các giải pháp Firebase Authentication cho môi trường thực tế. Nếu cần, hãy xem tài liệu về sự kết hợp giữa nền tảng và kỹ thuật xác thực của bạn.
Tôi có thể làm gì với trình mô phỏng Authentication?
Trình mô phỏng Authentication cung cấp khả năng mô phỏng cục bộ có độ chân thực cao cho các dịch vụ Firebase Authentication, cung cấp nhiều chức năng có trong Firebase Authentication chính thức. Khi kết hợp với các nền tảng của Apple, Android và SDK Firebase cho web, trình mô phỏng này cho phép bạn:
- Tạo, cập nhật và quản lý tài khoản người dùng mô phỏng để thử nghiệm email/mật khẩu, số điện thoại/SMS, xác thực đa yếu tố qua SMS và xác thực nhà cung cấp danh tính bên thứ ba (ví dụ: Google)
- Xem và chỉnh sửa người dùng được mô phỏng
- Hệ thống xác thực mã thông báo tuỳ chỉnh nguyên mẫu
- Kiểm tra các thông báo liên quan đến việc xác thực trong thẻ Nhật ký giao diện người dùng của Trình mô phỏng.
Chọn một dự án Firebase
Firebase Local Emulator Suite mô phỏng các sản phẩm cho một dự án Firebase.
Để chọn dự án cần sử dụng, trước khi khởi động trình mô phỏng, hãy chạy firebase use trong thư mục đang hoạt động của bạn trong CLI. Hoặc bạn có thể truyền cờ --project vào từng lệnh của trình mô phỏng.
Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực tế và dự án minh hoạ.
| Loại dự án | Tính năng | Sử dụng với trình mô phỏng |
|---|---|---|
| Real |
Dự án Firebase thực là dự án mà bạn đã tạo và định cấu hình (thường là thông qua bảng điều khiển Firebase). Dự án thực tế có các tài nguyên đang hoạt động, chẳng hạn như các phiên bản cơ sở dữ liệu, bộ chứa lưu trữ, hàm hoặc bất kỳ tài nguyên nào khác mà bạn thiết lập cho dự án Firebase đó. |
Khi làm việc với các dự án Firebase thực, bạn có thể chạy trình mô phỏng cho bất kỳ hoặc tất cả các sản phẩm được hỗ trợ. Đối với mọi sản phẩm bạn không mô phỏng, ứng dụng và mã của bạn sẽ tương tác với tài nguyên thực tế (thực thể cơ sở dữ liệu, bộ chứa lưu trữ, hàm, v.v.). |
| Bản trình diễn |
Dự án Firebase minh hoạ không có cấu hình Firebase thực và không có tài nguyên thực tế. Các dự án này thường được truy cập thông qua lớp học lập trình hoặc các hướng dẫn khác. Mã dự án cho các dự án minh hoạ có tiền tố |
Khi làm việc với các dự án Firebase minh hoạ, ứng dụng và mã của bạn chỉ tương tác với trình mô phỏng. Nếu ứng dụng của bạn cố gắng tương tác với một tài nguyên mà trình mô phỏng không chạy, thì mã đó sẽ không thành công. |
Bạn nên sử dụng dự án minh hoạ bất cứ khi nào có thể. Các lợi ích bao gồm:
- Thiết lập dễ dàng hơn vì bạn có thể chạy trình mô phỏng mà không cần tạo dự án Firebase
- An toàn hơn, vì nếu mã của bạn vô tình gọi các tài nguyên không được mô phỏng (môi trường thực tế), thì sẽ không có khả năng thay đổi dữ liệu, mức sử dụng và thanh toán
- Hỗ trợ ngoại tuyến tốt hơn vì không cần truy cập Internet để tải cấu hình SDK xuống.
Đo lường ứng dụng để giao tiếp với trình mô phỏng
SDK Android, iOS và web
Thiết lập cấu hình trong ứng dụng hoặc các lớp kiểm thử để tương tác với trình mô phỏng Authentication như sau.
Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Unity
FirebaseAuth auth = FirebaseAuth.DefaultInstance; // Connects to the Auth Emulator running on port 9099 auth.UseEmulator("127.0.0.1", 9099);
Web
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
Bạn không cần thiết lập thêm để tạo nguyên mẫu và kiểm thử các hoạt động tương tác giữa Authentication và Cloud Functions hoặc Firebase Security Rules cho Cloud Firestore hoặc Realtime Database. Khi trình mô phỏng Authentication được định cấu hình và các trình mô phỏng khác đang chạy, chúng sẽ tự động hoạt động cùng nhau.
Admin SDK giây
Firebase Admin SDK tự động kết nối với trình mô phỏng Authentication khi biến môi trường FIREBASE_AUTH_EMULATOR_HOST được đặt.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Xin lưu ý rằng trình mô phỏng Cloud Functions sẽ tự động nhận biết trình mô phỏng Authentication, nên bạn có thể bỏ qua bước này khi kiểm thử các hoạt động tích hợp giữa trình mô phỏng Cloud Functions và Authentication. Biến môi trường sẽ được tự động đặt cho Admin SDK trong Cloud Functions.
Khi bạn đặt biến môi trường, Firebase Admin SDK sẽ chấp nhận mã thông báo giá trị nhận dạng chưa ký và cookie của phiên do trình mô phỏng Authentication phát hành (tương ứng thông qua các phương thức verifyIdToken và createSessionCookie) để hỗ trợ quá trình phát triển và thử nghiệm cục bộ. Hãy nhớ không đặt biến môi trường trong môi trường thực tế.
Nếu muốn mã Admin SDK kết nối với một trình mô phỏng dùng chung đang chạy trong một môi trường khác, bạn cần chỉ định cùng một mã dự án mà bạn đã đặt bằng Giao diện dòng lệnh (CLI) của Firebase. Bạn có thể trực tiếp chuyển mã dự án đến initializeApp hoặc đặt biến môi trường GCLOUD_PROJECT.
SDK dành cho quản trị viên Node.js
admin.initializeApp({ projectId: "your-project-id" });
Biến môi trường
export GCLOUD_PROJECT="your-project-id"
Mã thông báo nhận dạng
Vì lý do bảo mật, trình mô phỏng Authentication sẽ phát hành mã thông báo nhận dạng chưa ký. Các mã thông báo này chỉ được các trình mô phỏng Firebase khác hoặc SDK của Firebase dành cho quản trị viên chấp nhận khi được định cấu hình. Các mã thông báo này sẽ bị các dịch vụ Firebase chính thức hoặc SDK của Firebase dành cho quản trị viên chạy ở chế độ sản xuất từ chối (ví dụ: hành vi mặc định không có các bước thiết lập được mô tả ở trên).
Khởi động trình mô phỏng
Bạn có thể sử dụng trình mô phỏng Authentication theo cách tương tác thông qua Emulator Suite UI và theo cách không tương tác thông qua giao diện REST cục bộ. Các phần sau đây đề cập đến các trường hợp sử dụng có tính tương tác và không có tính tương tác.
Để khởi động trình mô phỏng Authentication, giao diện REST và Emulator Suite UI, hãy thực thi:
firebase emulators:start
Xác thực email mô phỏng, đường liên kết email và xác thực ẩn danh
Đối với phương thức xác thực ẩn danh, ứng dụng của bạn có thể thực hiện logic đăng nhập cho nền tảng của bạn (iOS, Android, web).
Đối với phương thức xác thực bằng email/mật khẩu, bạn có thể bắt đầu tạo bản minh hoạ bằng cách thêm tài khoản người dùng vào trình mô phỏng Authentication từ ứng dụng của bạn bằng các phương thức SDK Authentication hoặc bằng cách sử dụng Emulator Suite UI.
- Trong Emulator Suite UI, hãy nhấp vào thẻ Xác thực.
- Nhấp vào nút Thêm người dùng.
- Làm theo trình hướng dẫn tạo tài khoản người dùng, điền vào các trường xác thực email.
Sau khi tạo người dùng thử nghiệm, ứng dụng của bạn có thể đăng nhập và đăng xuất người dùng bằng logic SDK cho nền tảng của bạn (iOS, Android, web).
Để kiểm thử quy trình xác minh email/đăng nhập bằng đường liên kết trong email, trình mô phỏng sẽ in một URL đến thiết bị đầu cuối mà firebase emulators:start được thực thi.
i To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-keyDán đường liên kết vào trình duyệt để mô phỏng sự kiện xác minh và kiểm tra xem quy trình xác minh có thành công hay không.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Để kiểm thử việc đặt lại mật khẩu, trình mô phỏng sẽ in một URL tương tự, bao gồm cả tham số newPassword (bạn có thể thay đổi nếu cần) vào thiết bị đầu cuối.
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORDKiểm thử không tương tác
Thay vì sử dụng Emulator Suite UI hoặc mã ứng dụng để quản lý tài khoản người dùng bằng email/mật khẩu, bạn có thể viết tập lệnh thiết lập kiểm thử gọi API REST để tạo và xoá tài khoản người dùng, đồng thời tìm nạp mã xác minh email ngoài băng tần để điền vào URL xác minh email của trình mô phỏng. Việc này giúp tách biệt mã nền tảng và mã kiểm thử, đồng thời cho phép bạn kiểm thử không tương tác.
Đối với quy trình kiểm thử email và mật khẩu không tương tác, trình tự thông thường như sau.
- Tạo người dùng bằng Authentication điểm cuối REST signUp.
- Đăng nhập người dùng bằng email và mật khẩu để thực hiện kiểm thử.
- Nếu phù hợp với các thử nghiệm của bạn, hãy tìm nạp mã xác minh email ngoài băng tần có sẵn từ điểm cuối REST dành riêng cho trình mô phỏng.
- Xoá hồ sơ người dùng bằng điểm cuối REST dành riêng cho trình mô phỏng để xoá dữ liệu.
Xác thực bằng điện thoại/SMS mô phỏng
Đối với tính năng xác thực qua điện thoại, Trình mô phỏng xác thực không hỗ trợ:
- Quy trình reCAPTCHA và APN. Sau khi được định cấu hình để tương tác với trình mô phỏng, SDK ứng dụng sẽ tắt các phương thức xác minh này theo cách tương tự như cách được mô tả cho hoạt động kiểm thử tích hợp (iOS, Android, web).
- Số điện thoại thử nghiệm có mã được định cấu hình sẵn trong bảng điều khiển Firebase.
Nếu không, về mã ứng dụng, quy trình xác thực qua điện thoại/SMS sẽ giống hệt với quy trình được mô tả cho môi trường thực tế (iOS, Android, web).
Sử dụng Emulator Suite UI:
- Trong Emulator Suite UI, hãy nhấp vào thẻ Xác thực.
- Nhấp vào nút Thêm người dùng.
- Làm theo trình hướng dẫn tạo tài khoản người dùng, điền vào các trường xác thực điện thoại.
Tuy nhiên, đối với quy trình xác thực qua điện thoại, trình mô phỏng sẽ KHÔNG kích hoạt việc gửi bất kỳ tin nhắn văn bản nào, vì việc liên hệ với nhà mạng nằm ngoài phạm vi và không phù hợp cho việc kiểm thử cục bộ! Thay vào đó, trình mô phỏng sẽ in ra mã được gửi qua SMS đến cùng một thiết bị đầu cuối mà bạn đã chạy firebase emulators:start; nhập mã này vào ứng dụng để mô phỏng người dùng kiểm tra tin nhắn văn bản của họ.
Kiểm thử không tương tác
Để kiểm thử phương thức xác thực qua điện thoại không tương tác, hãy sử dụng API REST của trình mô phỏng Authentication để truy xuất các mã SMS có sẵn. Xin lưu ý rằng mã này sẽ khác nhau mỗi khi bạn bắt đầu quy trình.
Trình tự thông thường như sau.
- Gọi cho nền tảng
signInWithPhoneNumberđể bắt đầu quy trình xác minh. - Truy xuất mã xác minh bằng điểm cuối REST dành riêng cho trình mô phỏng.
- Gọi đến số
confirmationResult.confirm(code)như thường lệ để cung cấp mã xác minh.
SMS xác thực đa yếu tố
Trình mô phỏng Authentication hỗ trợ tạo nguyên mẫu và thử nghiệm các quy trình xác thực đa yếu tố (MFA) qua SMS có trong phiên bản chính thức cho iOS, Android và web.
Khi thêm người dùng mô phỏng vào trình mô phỏng, bạn có thể bật MFA và định cấu hình một hoặc nhiều số điện thoại để gửi tin nhắn SMS chứa yếu tố thứ hai. Thông báo được xuất ra cùng một thiết bị đầu cuối mà bạn đã chạy firebase emulators:start và có sẵn trong giao diện REST.
Xác thực nhà cung cấp danh tính (IDP) bên thứ ba được mô phỏng
Trình mô phỏng Authentication cho phép bạn kiểm thử nhiều quy trình xác thực của bên thứ ba trong ứng dụng iOS, Android hoặc ứng dụng web mà không cần thay đổi mã phát hành chính thức. Để biết ví dụ về quy trình xác thực, hãy tham khảo tài liệu về nhiều tổ hợp nhà cung cấp và nền tảng mà bạn có thể sử dụng trong ứng dụng của mình.
Nói chung, bạn có thể sử dụng Firebase SDK để xác thực theo một trong hai cách:
- Ứng dụng của bạn cho phép SDK xử lý toàn bộ quy trình từ đầu đến cuối, bao gồm cả mọi hoạt động tương tác với nhà cung cấp IDP bên thứ ba để truy xuất thông tin xác thực.
- Ứng dụng của bạn truy xuất thông tin xác thực theo cách thủ công từ một nhà cung cấp bên thứ ba bằng cách sử dụng SDK của bên đó và chuyển thông tin xác thực đó đến SDK Authentication.
Một lần nữa, hãy kiểm tra đường liên kết đến tài liệu ở trên và đảm bảo bạn đã quen thuộc với quy trình mà bạn muốn sử dụng (quy trình do Firebase SDK quản lý so với quy trình truy xuất thông tin xác thực theo cách thủ công). Trình mô phỏng Authentication hỗ trợ kiểm thử cả hai phương pháp.
Thử nghiệm quy trình IDP dựa trên Firebase SDK
Nếu ứng dụng của bạn sử dụng bất kỳ quy trình toàn diện nào của Firebase SDK, chẳng hạn như OAuthProvider để
đăng nhập bằng Microsoft, GitHub hoặc Yahoo, thì để thử nghiệm tương tác, trình mô phỏng Authentication
sẽ cung cấp phiên bản cục bộ của trang đăng nhập tương ứng để giúp bạn
thử nghiệm quy trình xác thực từ các ứng dụng web gọi phương thức signinWithPopup hoặc
signInWithRedirect. Trang đăng nhập được phân phát cục bộ này cũng xuất hiện trong
các ứng dụng di động, do thư viện WebView của nền tảng hiển thị.
Trình mô phỏng tạo thông tin đăng nhập và tài khoản người dùng mô phỏng của bên thứ ba khi cần trong quá trình thực hiện các quy trình.
Kiểm thử quy trình IDP bằng cách truy xuất thông tin xác thực theo cách thủ công
Nếu bạn sử dụng kỹ thuật đăng nhập "thủ công" và gọi phương thức signInWithCredentials của nền tảng, thì như thường lệ, ứng dụng của bạn sẽ yêu cầu đăng nhập thực tế bằng bên thứ ba và truy xuất thông tin xác thực thực tế của bên thứ ba.
Xin lưu ý rằng trình mô phỏng chỉ hỗ trợ xác thực signInWithCredential cho thông tin xác thực được truy xuất từ tính năng Đăng nhập bằng Google, Apple và các nhà cung cấp khác sử dụng mã thông báo giá trị nhận dạng được triển khai dưới dạng Mã thông báo web JSON (JWT). Mã truy cập (ví dụ: mã do Facebook hoặc Twitter cung cấp, không phải JWT) không được hỗ trợ. Phần tiếp theo sẽ thảo luận về một giải pháp thay thế trong những trường hợp này.
Kiểm thử không tương tác
Một phương pháp để kiểm thử không tương tác là tự động hoá các lượt nhấp của người dùng trên trang đăng nhập do trình mô phỏng phân phát. Đối với ứng dụng web, hãy sử dụng giao diện điều khiển như WebDriver. Đối với thiết bị di động, hãy sử dụng công cụ kiểm thử giao diện người dùng trên nền tảng của bạn, chẳng hạn như Espresso hoặc Xcode.
Ngoài ra, bạn có thể cập nhật mã để sử dụng signInWithCredential (ví dụ: trong một nhánh mã) và sử dụng quy trình xác thực mã thông báo bằng mã thông báo nhận dạng mô phỏng cho tài khoản thay vì thông tin đăng nhập thực.
- Kết nối lại hoặc đánh dấu là nội dung nhận xét phần mã truy xuất idTokens từ IDP; việc này giúp bạn không cần nhập tên người dùng và mật khẩu thực trong quá trình kiểm thử, đồng thời giúp các hoạt động kiểm thử của bạn không bị giới hạn hạn mức và tốc độ API tại IDP.
- Thứ hai, hãy sử dụng chuỗi JSON cố định thay cho mã thông báo cho
signInWithCredential. Lấy SDK web làm ví dụ, bạn có thể thay đổi mã thành:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
Khi được dùng với trình mô phỏng, mã này sẽ xác thực thành công người dùng
bằng email foo@example.com tại Google. Hãy coi trường phụ là khoá chính, có thể thay đổi thành bất kỳ chuỗi nào, mô phỏng việc đăng nhập của nhiều người dùng. Bạn có thể
thay thế firebase.auth.GoogleAuthProvider bằng, ví dụ:
new firebase.auth.OAuthProvider('yahoo.com') hoặc bất kỳ mã nhà cung cấp nào khác mà bạn muốn
mô phỏng.
Xác thực mã thông báo tuỳ chỉnh được mô phỏng
Trình mô phỏng Authentication xử lý việc xác thực bằng Mã thông báo web JSON tuỳ chỉnh bằng cách sử dụng các lệnh gọi đến phương thức signInWithCustomToken trên các nền tảng được hỗ trợ, như mô tả trong tài liệu về Authentication chính thức.
Sự khác biệt giữa trình mô phỏng Authentication và môi trường thực tế
Trình mô phỏng Authentication của Firebase mô phỏng nhiều tính năng của sản phẩm chính thức. Tuy nhiên, vì mọi loại hệ thống xác thực đều phụ thuộc rất nhiều vào tính bảo mật ở nhiều cấp độ (thiết bị, nhà cung cấp bên thứ ba, Firebase, v.v.), nên trình mô phỏng khó có thể tạo lại đúng cách tất cả các luồng.
Cloud IAM
Bộ công cụ mô phỏng Firebase không cố gắng sao chép hoặc tuân theo bất kỳ hành vi nào liên quan đến IAM để chạy. Trình mô phỏng tuân thủ Quy tắc bảo mật của Firebase được cung cấp, nhưng trong những trường hợp thường sử dụng IAM, chẳng hạn như để đặt tài khoản dịch vụ gọi Cloud Functions và do đó là các quyền, thì trình mô phỏng không thể cấu hình và sẽ sử dụng tài khoản có sẵn trên toàn cầu trên máy phát triển, tương tự như việc chạy trực tiếp một tập lệnh cục bộ.
Đăng nhập qua đường liên kết trong email trên thiết bị di động
Vì trên nền tảng di động, tính năng đăng nhập bằng đường liên kết trong email dựa vào Đường liên kết động của Firebase, nên tất cả các đường liên kết như vậy sẽ được mở trên nền tảng web (di động).
Đăng nhập qua bên thứ ba
Đối với quy trình đăng nhập của bên thứ ba, Firebase Authentication dựa vào thông tin xác thực bảo mật của các nhà cung cấp bên thứ ba như Twitter và GitHub.
Trình mô phỏng Authentication chấp nhận thông tin xác thực thực tế từ các nhà cung cấp OpenID Connect như Google và Apple. Thông tin đăng nhập của các nhà cung cấp không phải OpenID Connect không được hỗ trợ.
Đăng nhập bằng email/SMS
Trong các ứng dụng chính thức, quy trình đăng nhập bằng email và SMS bao gồm một thao tác không đồng bộ, trong đó người dùng kiểm tra tin nhắn đã nhận và nhập mã đăng nhập vào giao diện đăng nhập. Trình mô phỏng Authentication không gửi email hoặc tin nhắn SMS, nhưng như đã mô tả ở trên, trình mô phỏng này tạo mã đăng nhập và xuất mã đó ra thiết bị đầu cuối để dùng trong quá trình kiểm thử.
Trình mô phỏng không hỗ trợ khả năng xác định số điện thoại thử nghiệm bằng mã đăng nhập cố định như khi dùng bảng điều khiển Firebase.
Xác thực mã thông báo tuỳ chỉnh
Trình mô phỏng Authentication không xác thực chữ ký hoặc thời hạn của mã thông báo tuỳ chỉnh. Nhờ vậy, bạn có thể sử dụng mã thông báo được tạo thủ công và sử dụng lại mã thông báo vô thời hạn trong các tình huống tạo bản minh hoạ và thử nghiệm.
Giới hạn tốc độ/chống hành vi sai trái
Trình mô phỏng Authentication không sao chép các tính năng giới hạn tốc độ sản xuất hoặc chống hành vi sai trái.
Hàm chặn
Trong phiên bản chính thức, người dùng được ghi vào bộ nhớ một lần sau khi cả hai sự kiện beforeCreate và beforeSignIn được kích hoạt. Tuy nhiên, do các hạn chế về kỹ thuật, trình mô phỏng Authentication sẽ ghi vào kho lưu trữ hai lần, một lần sau khi tạo người dùng và một lần sau khi đăng nhập. Điều này có nghĩa là đối với người dùng mới, bạn có thể gọi thành công getAuth().getUser() trong beforeSignIn trong trình mô phỏng Authentication, nhưng bạn sẽ gặp lỗi khi làm như vậy trong phiên bản chính thức.
Bước tiếp theo là gì?
Để xem một loạt video được tuyển chọn và các ví dụ hướng dẫn chi tiết, hãy theo dõi Danh sách phát về chương trình đào tạo về Trình mô phỏng Firebase.
Vì các hàm được kích hoạt là một thành phần tích hợp điển hình với Authentication, nên hãy tìm hiểu thêm về trình mô phỏng Cloud Functions cho Firebase tại phần Chạy hàm cục bộ.