Kết nối ứng dụng với Trình mô phỏng xác thực

Trước khi sử dụng Trình mô phỏng xác thực trong ứng dụng, hãy đảm bảo rằng bạn nắm rõ quy trình công việc tổng thể của Bộ mô phỏng cục bộ của Firebase, đồng thời cài đặt và định cấu hình Bộ mô phỏng cục bộ cũng như xem xét các lệnh CLI của bộ công cụ 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 Xác thực Firebase cho phiên bản chính thức. Nếu cần, hãy xem tài liệu về sự kết hợp giữa kỹ thuật kết hợp nền tảng và kỹ thuật xác thực.

Tôi có thể làm gì với Trình mô phỏng xác thực?

Trình mô phỏng xác thực cung cấp quy trình mô phỏng cục bộ với độ chân thực cao của các dịch vụ Xác thực Firebase, cung cấp nhiều chức năng có trong phần Xác thực Firebase chính thức. Kết hợp với các nền tảng của Apple, SDK Firebase dành cho Android và Web, trình mô phỏng cho phép bạn:

  • Tạo, cập nhật và quản lý tài khoản người dùng được mô phỏng để kiểm thử email/mật khẩu, số điện thoại/SMS, đa yếu tố SMS và hoạt động 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

Bộ công cụ mô phỏng cục bộ Firebase mô phỏng các sản phẩm cho một dự án Firebase duy nhất.

Để chọn dự án sẽ sử dụng, trước khi bạn khởi động trình mô phỏng, trong CLI, hãy chạy firebase use trong thư mục đang hoạt động của bạn. Bạn cũng có thể chuyển cờ --project vào từng lệnh của trình mô phỏng.

Bộ công cụ mô phỏng cục bộ hỗ trợ việc mô phỏng các dự án Firebase thực và các dự án minh hoạ.

Loại dự án Tính năng Sử dụng với trình mô phỏng
Thực

Dự án Firebase thực tế là dự án do bạn tạo và định cấu hình (nhiều khả năng là thông qua bảng điều khiển của Firebase).

Các dự án thực tế có tài nguyên trực tiếp, chẳng hạn như các phiên bản cơ sở dữ liệu, bộ chứa bộ nhớ, 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 tế, bạn có thể chạy trình mô phỏng cho bất kỳ hoặc tất cả sản phẩm được hỗ trợ.

Đối với bất kỳ sản phẩm nào 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 trực tiếp (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 trực tiếp. Những 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 của các dự án minh hoạ có tiền tố demo-.

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 các 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
  • Mức độ an toàn cao 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 (chính thức), 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 của bạn để trò chuyện 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 xác thực như sau.

Kotlin+KTX
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)

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 phải 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 tính năng Xác thực và Chức năng đám mây hoặc Quy tắc bảo mật của Firebase đối với Cloud Firestore hoặc Cơ sở dữ liệu theo thời gian thực. Khi Trình mô phỏng xác thực được định cấu hình và các trình mô phỏng khác đang chạy, các trình mô phỏng này sẽ tự động hoạt động cùng nhau.

SDK dành cho quản trị viên

SDK quản trị của Firebase tự động kết nối với Trình mô phỏng xác thực khi biến môi trường FIREBASE_AUTH_EMULATOR_HOST được đặt.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

Lưu ý rằng trình mô phỏng Cloud Functions tự động nhận biết Trình mô phỏng xác thực, vì vậy, bạn có thể bỏ qua bước này khi kiểm thử hoạt động tích hợp giữa các chức năng đám mây và trình mô phỏng xác thực. Biến môi trường sẽ được tự động đặt cho SDK quản trị trong Cloud Functions.

Khi bạn đặt biến môi trường, SDK quản trị Firebase sẽ chấp nhận Mã thông báo mã nhận dạng chưa ký và cookie phiên do Trình mô phỏng xác thực phát hành (thông qua phương thức verifyIdTokencreateSessionCookie tương ứng) để hỗ trợ việc phát triển và kiểm thử cục bộ. Hãy đảm bảo không đặt biến môi trường trong phiên bản chính thức.

Nếu muốn mã SDK quản trị của mình kết nối với một trình mô phỏng dùng chung 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 truyề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 giá trị nhận dạng

Vì lý do bảo mật, Trình mô phỏng xác thực sẽ đưa ra mã thông báo mã nhận dạng chưa ký. Chỉ các trình mô phỏng Firebase khác hoặc SDK quản trị của Firebase mới chấp nhận mã thông báo này khi được định cấu hình. Các dịch vụ Firebase chính thức hoặc SDK quản trị Firebase chạy ở chế độ phát hành công khai sẽ từ chối những mã thông báo này (ví dụ: hành vi mặc định mà không có bước thiết lập như mô tả ở trên).

Khởi động trình mô phỏng

Bạn có thể sử dụng Trình mô phỏng xác thực theo cách có tính tương tác thông qua Giao diện người dùng của Bộ mô phỏng và không tương tác thông qua giao diện REST cục bộ của ứng dụng. Các phần sau đây đề cập đến các trường hợp sử dụng mang tính tương tác và không mang tính tương tác.

Để khởi động Trình mô phỏng xác thực, giao diện REST và giao diện người dùng của Trình mô phỏng, hãy thực thi:

firebase emulators:start

Để xác thực ẩn danh, ứng dụng của bạn có thể thực thi logic đăng nhập cho nền tảng của bạn (iOS, Android, web).

Để xác thực email/mật khẩu, bạn có thể bắt đầu tạo nguyên mẫu bằng cách thêm tài khoản người dùng vào Trình mô phỏng xác thực từ ứng dụng sử dụng các phương thức SDK xác thực hoặc sử dụng giao diện người dùng của Bộ mô phỏng.

  1. Trong giao diện người dùng của Bộ công cụ mô phỏng, hãy nhấp vào thẻ Xác thực.
  2. Nhấp vào nút Thêm người dùng.
  3. 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.

Với một người dùng thử nghiệm được tạo, ứ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/đăng nhập email bằng luồng liên kết email, trình mô phỏng sẽ in một URL đến thiết bị đầu cuối nơi 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-key

Dá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ử thao tá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_PASSWORD

Kiểm thử không tương tác

Thay vì sử dụng Giao diện người dùng của Bộ mô phỏng hoặc mã ứng dụng khách để quản lý tài khoản email/mật khẩu, bạn có thể viết tập lệnh thiết lập thử nghiệm 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 URL xác minh email của trình mô phỏng. Điều 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ử một cách không tương tác.

Đối với các 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 sẽ như sau.

  1. Tạo người dùng có điểm cuối REST đăng ký xác thực.
  2. Đăng nhập người dùng bằng email và mật khẩu để tiến hành kiểm tra.
  3. Nếu phù hợp với các chương trình kiểm thử 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.
  4. Xoá bản ghi 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.

Mô phỏng tính năng xác thực qua SMS/điện thoại

Đối với phương thức xác thực điện thoại, trình mô phỏng tính năng xác thực không hỗ trợ:

  • Các luồng 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ư mô tả trong quá trình kiểm thử tích hợp (iOS, Android, web).
  • Thử nghiệm số điện thoại với mã được định cấu hình sẵn trong bảng điều khiển của 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 với quy trình được mô tả cho phiên bản chính thức (iOS, Android, web).

Sử dụng giao diện người dùng của Bộ mô phỏng:

  1. Trong giao diện người dùng của Bộ công cụ mô phỏng, hãy nhấp vào thẻ Xác thực.
  2. Nhấp vào nút Thêm người dùng.
  3. 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 với việc kiểm thử cục bộ! Thay vào đó, trình mô phỏng sẽ in mã đã được gửi qua SMS đến cùng 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 việc 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

Đối với quy trình kiểm thử xác thực điện thoại không tương tác, hãy sử dụng API REST của trình mô phỏng xác thực để truy xuất các mã SMS có sẵn. Lưu ý rằng mã sẽ khác nhau mỗi khi bạn bắt đầu luồng.

Trình tự thông thường như sau.

  1. Gọi nền tảng signInWithPhoneNumber để bắt đầu quy trình xác minh.
  2. Truy xuất mã xác minh bằng điểm cuối REST dành riêng cho trình mô phỏng.
  3. Gọi confirmationResult.confirm(code) như bình thường để cung cấp mã xác minh.

SMS đa yếu tố

Trình mô phỏng xác thực hỗ trợ việc tạo nguyên mẫu và kiểm thử quy trình xác thực đa yếu tố (MFA) qua SMS hiện có phiên bản chính thức dành cho iOS, Androidweb.

Khi thêm người dùng mô phỏng vào trình mô phỏng, bạn có thể bật tính năng MFA và định cấu hình một hoặc nhiều số điện thoại mà tin nhắn SMS yếu tố thứ hai sẽ được gửi đến. Thông báo được xuất đến cùng một thiết bị đầu cuối mà bạn chạy firebase emulators:start và có sẵn từ giao diện REST.

Quy trình xác thực nhà cung cấp danh tính (IDP) được mô phỏng của bên thứ ba

Trình mô phỏng xác thực 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.

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, bao gồm 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 từ nhà cung cấp bên thứ ba theo cách thủ công bằng cách sử dụng SDK của bên đó và chuyển thông tin xác thực đó đến SDK xác thực.

Một lần nữa, hãy kiểm tra đường liên kết đến tài liệu ở trên để đảm bảo bạn đã nắm rõ bất kỳ quy trình nào – do Firebase SDK quản lý và truy xuất thông tin xác thực thủ công – bạn muốn sử dụng. Trình mô phỏng xác thực hỗ trợ kiểm thử cả hai phương pháp.

Kiểm thử luồng nhà cung cấp danh tính (IDP) dựa trên SDK Firebase

Nếu ứng dụng của bạn sử dụng bất kỳ quy trình đầu cuối nào của SDK Firebase (chẳng hạn như OAuthProvider để đăng nhập bằng Microsoft, GitHub hoặc Yahoo) để kiểm thử tương tác, thì Trình mô phỏng xác thực sẽ phân phát một phiên bản cục bộ của trang đăng nhập tương ứng để giúp bạn kiểm thử 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 dành cho thiết bị di động, do thư viện webview của nền tảng của bạn kết xuất.

Trình mô phỏng sẽ tạo thông tin đăng nhập và tài khoản người dùng bên thứ ba mô phỏng khi cần thiết trong quá trình thực hiện các quy trình.

Kiểm tra luồng IDP bằng tính năng 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 sẽ yêu cầu đăng nhập thực qua bên thứ ba và truy xuất thông tin đăng nhập thực của bên thứ ba.

Xin lưu ý rằng trình mô phỏng chỉ hỗ trợ phương thức xác thực signInWithCredential cho thông tin xác thực được truy xuất qua 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 mã 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 mà không phải là JWT) không được hỗ trợ. Phần tiếp theo sẽ thảo luận về phương án 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á 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 các ứng dụng web, hãy 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 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 mã nhận dạng mô phỏng cho tài khoản thay vì thông tin xác thực thực.

  1. Kết nối lại hoặc ghi chú phần mã truy xuất idTokens từ IDP; thao tác này sẽ loại bỏ nhu cầu 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 giảm bớt hoạt động kiểm thử khỏi hạn mức API và giới hạn số lượng yêu cầu tại IDP.
  2. Thứ hai, hãy sử dụng một chuỗi JSON bằng chữ 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 sử 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à một khoá chính. Khoá này có thể thay đổi thành bất kỳ chuỗi nào, mô phỏng hoạt động đăng nhập cho nhiều người dùng. Chẳng hạn, bạn có thể thay thế firebase.auth.GoogleAuthProvider bằng 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 xác thực xử lý việc xác thực bằng Mã thông báo web JSON tuỳ chỉnh thông qua 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ề Xác thực bản phát hành công khai.

Điểm khác biệt giữa Trình mô phỏng xác thực và phiên bản chính thức

Trình mô phỏng xác thực Firebase mô phỏng nhiều tính năng của sản phẩm chính thức. Tuy nhiên, vì bất kỳ loại hệ thống xác thực nào cũng phụ thuộc 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 quy trình.

Cloud IAM

Bộ mô phỏng Firebase không tìm cách 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ủ các Quy tắc bảo mật Firebase được cung cấp, nhưng trong những trường hợp mà IAM thường được sử dụng, chẳng hạn như để thiết lập tài khoản dịch vụ gọi Cloud Functions và theo đó, bạn không thể định cấu hình trình mô phỏng và sẽ sử dụng tài khoản có sẵn trên toàn cầu trên máy nhà phát triển của bạn, tương tự như chạy trực tiếp một tập lệnh cục bộ.

Vì trên các nền tảng di động, việc đăng nhập bằng đường liên kết email dựa vào Đường liên kết động của Firebase. Do đó, tất cả các đường liên kết đó sẽ được mở trên nền tảng web (dành cho thiết bị 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, tính năng Xác thực Firebase dựa vào thông tin xác thực bảo mật từ các nhà cung cấp bên thứ ba như Twitter và GitHub.

Thông tin xác thực thực từ các nhà cung cấp OpenID Connect như Google và Apple sẽ được Trình mô phỏng xác thực chấp nhận. Thông tin xác thực của các nhà cung cấp không phải OpenID Connect sẽ không được hỗ trợ.

Đăng nhập bằng email / tin nhắn SMS

Trong các ứng dụng chính thức, quy trình đăng nhập bằng email và SMS liên quan đến 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 xác thực không gửi bất kỳ email hoặc tin nhắn SMS nào, nhưng như mô tả ở trên, trình mô phỏng này tạo mã đăng nhập và xuất các mã đó đến 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ư có thể thực hiện bằng bảng điều khiển của Firebase.

Xác thực mã thông báo tuỳ chỉnh

Trình mô phỏng xác thực không xác thực chữ ký hoặc ngày hết hạn của mã thông báo tuỳ chỉnh. Điều này cho phép bạn 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 nguyên mẫu và kiểm thử.

Giới hạn số lượng yêu cầu / chống sử dụng sai mục đích

Trình mô phỏng xác thực không sao chép các tính năng giới hạn tốc độ phát hành công khai hoặc chống hành vi sử dụng sai mục đích.

Hàm chặn

Trong phiên bản phát hành 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 beforeCreatebeforeSignIn được kích hoạt. Tuy nhiên, do những hạn chế về kỹ thuật, trình mô phỏng xác thực sẽ ghi vào lưu trữ hai lần, một lần sau khi tạo người dùng và một lần nữa 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 xác thực, nhưng bạn sẽ gặp lỗi khi thực hiện việc này trong phiên bản chính thức.

Tiếp theo là gì?