Kết nối ứng dụng của bạn 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 với ứng dụng của bạn, hãy đảm bảo rằng bạn hiểu toàn bộ quy trình làm việc của Firebase Local Emulator Suite cũng như 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 nó.

Chủ đề này giả định rằng bạn đã quen với việc phát triển các giải pháp Xác thực Firebase cho sản xuất. Nếu cần, hãy xem lại 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 Xác thực?

Trình mô phỏng Xác thực cung cấp mô phỏng cục bộ có độ chính xác cao cho các dịch vụ Xác thực Firebase, cung cấp nhiều chức năng có trong Xác thực Firebase sản xuất . Được kết hợp với các nền tảng của Apple, SDK Android và Web Firebase, 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 mô phỏng để kiểm tra email/mật khẩu, số điện thoại/SMS, SMS đa yếu tố và xác thực nhà cung cấp danh tính của 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 tùy chỉnh nguyên mẫu
  • Kiểm tra các thông báo liên quan đến xác thực trong tab Nhật ký giao diện người dùng của Trình mô phỏng.

Chọn dự án Firebase

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

Để chọn dự án sẽ sử dụng, trước khi bạn khởi động trình mô phỏng, hãy chạy firebase use trong thư mục làm việc của bạn. Hoặc bạn có thể chuyển cờ --project cho mỗi lệnh trình mô phỏng.

Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và các dự án demo .

Loại dự án Đặc trưng Sử dụng với trình giả lập
Thực tế

Dự án Firebase thực sự là dự án bạn đã tạo và định cấu hình (rất có thể thông qua bảng điều khiển Firebase).

Các dự án thực có tài nguyên trực tiếp, như phiên bản cơ sở dữ liệu, nhóm 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 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 (phiên bản cơ sở dữ liệu, nhóm lưu trữ, chức năng, v.v.).

Thử nghiệm

Dự án Firebase demo 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 các lớp học lập trình hoặc các hướng dẫn khác.

ID dự án cho các dự án demo có tiền tố demo- .

Khi làm việc với các dự án Firebase demo, ứ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 tài nguyên mà trình mô phỏng không chạy thì mã đó sẽ không thành công.

Chúng tôi khuyên bạn nên sử dụng các dự án demo bất cứ khi nào có thể. 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 cao hơn, vì nếu mã của bạn vô tình gọi các tài nguyên (sản xuất) không được mô phỏng thì sẽ không có cơ hội thay đổi dữ liệu, 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 xuống cấu hình SDK của bạn.

Thiết lập ứng dụng của bạn để 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 tra để 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);
Nhanh
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)

Web modular API

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://127.0.0.1:9099");

Web namespaced API

const auth = firebase.auth();
auth.useEmulator("http://127.0.0.1:9099");

Không cần thiết lập bổ sung để tạo nguyên mẫu và kiểm tra các tương tác giữa Xác thực và Chức năng đám mây hoặc Quy tắc bảo mật Firebase cho Cloud Firestore hoặc Cơ sở dữ liệu 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, chúng sẽ tự động hoạt động cùng nhau.

SDK quản trị

SDK quản trị 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 Chức năng đám mây tự động nhận biết trình mô phỏng Xác thực nên bạn có thể bỏ qua bước này khi kiểm tra sự tích hợp giữa 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 tự động cho SDK quản trị trong Chức năng đám mây.

Với biến môi trường được đặt, SDK quản trị Firebase sẽ chấp nhận Mã thông báo ID không dấu và cookie phiên do trình mô phỏng xác thực cấp (thông qua các phương thức verifyIdTokencreateSessionCookie tương ứng) để tạo điều kiện phát triển và thử nghiệm cục bộ. Vui lòng đảm bảo không đặt biến môi trường trong sản xuất.

Nếu muốn mã SDK quản trị của mình kết nối với trình mô phỏng dùng chung chạy trong môi trường khác, bạn sẽ cần chỉ định cùng một ID dự án mà bạn đã đặt bằng Firebase CLI . Bạn có thể chuyển ID dự án trực tiếp tới initializeApp hoặc đặt biến môi trường GCLOUD_PROJECT .

SDK quản trị 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 ID

Vì lý do bảo mật, trình mô phỏng xác thực sẽ phát hành mã thông báo ID không dấu , chỉ được các trình mô phỏng Firebase khác hoặc SDK quản trị Firebase chấp nhận khi được định cấu hình . Các mã thông báo này sẽ bị từ chối bởi các dịch vụ Firebase sản xuất hoặc SDK quản trị Firebase chạy ở chế độ sản xuất (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 Xác thực một cách tương tác thông qua Giao diện người dùng Bộ mô phỏng và không tương tác thông qua giao diện REST cục bộ của nó. Các phần sau đây bao gồm các trường hợp sử dụng tương tác và không tương tác.

Để khởi động Trình mô phỏng xác thực, giao diện REST của nó và Giao diện người dùng của Bộ 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 hiện 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 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 của mình bằng phương pháp SDK xác thực hoặc bằng cách sử dụng giao diện người dùng Bộ mô phỏng.

  1. Trong giao diện người dùng Emulator Suite, hãy nhấp vào tab 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.

Khi 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 tra việc xác minh/đăng nhập email bằng các luồng liên kết email, trình mô phỏng sẽ in một URL tới 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 liên kết vào trình duyệt của bạn để mô phỏng sự kiện xác minh và kiểm tra xem 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 tra 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 tham số newPassword (bạn có thể thay đổi nếu cần), tới 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 tra không tương tác

Thay vì sử dụng giao diện người dùng Emulator Suite hoặc mã máy khách để quản lý tài khoản người dùng 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à xóa tài khoản người dùng cũng như tìm nạp mã xác minh email ngoài phạm vi để điền xác minh email của trình mô phỏng URL. Điều này giúp tách biệt nền tảng và mã kiểm tra, đồng thời cho phép bạn kiểm tra không tương tác.

Đối với các luồng kiểm tra mật khẩu và email không tương tác, trình tự điển hình như sau.

  1. Tạo người dùng với đ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 để thực hiện kiểm tra.
  3. Nếu có thể áp dụng cho các thử nghiệm của bạn, hãy tìm nạp mã xác minh email ngoài phạm vi có sẵn từ điểm cuối REST dành riêng cho trình mô phỏng .
  4. Xóa bản ghi người dùng bằng điểm cuối REST dành riêng cho trình mô phỏng để xóa dữ liệu.

Xác thực điện thoại/SMS mô phỏng

Để xác thực qua điện thoại, trình giả lập Auth không hỗ trợ:

  • 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 khách sẽ vô hiệu hóa các phương thức xác minh này theo cách tương tự như cách được mô tả cho thử nghiệm tích hợp ( iOS , Android , web ).
  • Kiểm tra số điện thoại bằng mã được định cấu hình sẵn trong bảng điều khiển Firebase.

Mặt khác, về mặt mã máy khách, luồng xác thực điện thoại/SMS giống hệt với luồng được mô tả cho sản xuất ( iOS , Android , web ).

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

  1. Trong giao diện người dùng Emulator Suite, hãy nhấp vào tab 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 các luồng xác thực qua điện thoại, trình mô phỏng sẽ KHÔNG kích hoạt gửi bất kỳ tin nhắn văn bản nào vì việc liên hệ với nhà cung cấp dịch vụ là nằm ngoài phạm vi và không thân thiện với việc thử nghiệm tại địa phương! Thay vào đó, trình mô phỏng in ra mã lẽ ra đã đượ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 người dùng kiểm tra tin nhắn văn bản của họ.

Kiểm tra không tương tác

Để kiểm tra 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 mã SMS có sẵn. Lưu ý rằng mã sẽ khác nhau mỗi khi bạn bắt đầu quy trình.

Trình tự điển hình như sau.

  1. Gọi nền tảng signInWithPhoneNumber để bắt đầu quá trình xác minh.
  2. Truy xuất mã xác minh bằng cách sử dụ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 với mã xác minh.

SMS đa yếu tố

Trình mô phỏng xác thực hỗ trợ tạo mẫu và thử nghiệm các luồng xác thực đa yếu tố (MFA) SMS có sẵn trong sản xuất 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 MFA và định cấu hình một hoặc nhiều số điện thoại để gửi tin nhắn SMS nhân tố thứ hai. Các tin nhắn đượ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 từ giao diện REST.

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

Trình mô phỏng xác thực cho phép bạn kiểm tra nhiều luồng xác thực của bên thứ ba trong ứng dụng iOS, Android hoặc web mà không có thay đổi nào từ mã sản xuất. Để biết ví dụ về các luồng xác thực, hãy tham khảo tài liệu về các cách kết hợp khác nhau giữa 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 SDK Firebase để 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ộ quá trình từ đầu đến cuối, bao gồm tất cả các 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 SDK của bên đó và chuyển các thông tin xác thực đó tới SDK xác thực.

Một lần nữa, hãy kiểm tra liên kết tài liệu ở trên và đảm bảo bạn đã quen với bất kỳ luồng nào - truy xuất thông tin xác thực do SDK quản lý của Firebase so với 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ợ thử nghiệm một trong hai phương pháp.

Kiểm tra luồng IDP dựa trên SDK Firebase

Nếu ứng dụng của bạn sử dụng bất kỳ luồng đầu cuối SDK Firebase nào, như OAuthProvider để đăng nhập bằng Microsoft, GitHub hoặc Yahoo, để thử nghiệm tương tác, thì trình mô phỏng Xác thực sẽ cung cấp phiên bản cục bộ của trang đăng nhập tương ứng để giúp bạn kiểm tra 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ối cục bộ này cũng xuất hiện trong ứng dụng dành cho thiết bị di động, được hiển thị bởi thư viện chế độ xem web trên nền tảng của bạn.

Trình mô phỏng tạo tài khoản người dùng và thông tin xác thực giả của bên thứ ba nếu cần khi các luồng tiếp tục.

Kiểm tra luồng IDP bằng cách truy xuất thông tin xác thực 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 sự bên thứ ba và truy xuất thông tin xác thực thực sự của bên thứ ba.

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ừ ​​Đăng nhập bằng Google, Apple và các nhà cung cấp khác sử dụng mã thông báo ID được triển khai dưới dạng Mã thông báo Web JSON (JWT). Mã thông báo truy cập (ví dụ: mã thông báo do Facebook hoặc Twitter cung cấp, không phải là JWT) không được hỗ trợ. Phần tiếp theo thảo luận về một giải pháp thay thế trong những trường hợp này.

Kiểm tra không tương tác

Một cách tiếp cận để thử nghiệm không tương tác là tự động hóa các lần nhấp chuột của người dùng vào 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 tra giao diện người dùng từ nền tảng của bạn, như Espresso hoặc Xcode.

Ngoài ra, bạn có thể cập nhật mã của mình để sử dụng signInWithCredential (ví dụ: trong nhánh mã) và sử dụng luồng xác thực mã thông báo với mã thông báo ID giả cho tài khoản thay vì thông tin xác thực thực.

  1. Viết lại hoặc nhận xét phần mã truy xuất idTokens từ IDP; điều này loại bỏ nhu cầu nhập tên người dùng và mật khẩu thực trong các bài kiểm tra của bạn, đồng thời loại bỏ các bài kiểm tra của bạn khỏi hạn ngạch API và giới hạn tốc độ tại IDP.
  2. Thứ hai, sử dụng 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ụ như một khóa chính, có thể được thay đổi thành bất kỳ chuỗi nào, mô phỏng việc đăng nhập của những người dùng khác nhau. Ví dụ: bạn có thể thay thế firebase.auth.GoogleAuthProvider bằng new firebase.auth.OAuthProvider('yahoo.com') hoặc bất kỳ ID 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 tùy chỉnh được mô phỏng

Trình mô phỏng xác thực xử lý xác thực bằng Mã thông báo web JSON tùy 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ư được mô tả trong tài liệu Xác thực sản xuất .

Trình mô phỏng xác thực khác với phiên bản sản xuất như thế nào

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 sản xuất. Tuy nhiên, vì bất kỳ loại hệ thống xác thực nào đều phụ thuộc nhiều vào bảo mật ở nhiều cấp độ (thiết bị, nhà cung cấp bên thứ 3, Firebase, v.v.) nên trình mô phỏng khó có thể tạo lại đúng tất cả các luồng.

Đám mây IAM

Bộ mô phỏng Firebase không cố gắng sao chép hoặc tôn trọng bất kỳ hành vi nào liên quan đến IAM khi chạy. Trình mô phỏng tuân thủ Quy tắc bảo mật Firebase được cung cấp, nhưng trong các trường hợp IAM thường được sử dụng, chẳng hạn như để đặt tài khoản dịch vụ gọi Chức năng đám mây và do đó có quyền, trình mô phỏng không thể định 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 nhà phát triển của bạn, tương tự như chạy trực tiếp tập lệnh cục bộ.

Vì trên nền tảng di động, việc đăng nhập bằng liên kết email phụ thuộc vào Liên kết động Firebase nên thay vào đó, tất cả các liên kết như vậy sẽ được mở trên nền tảng web (di động).

Đăng nhập của bên thứ ba

Đối với luồng đăng nhập của bên thứ ba, Xác thực Firebase dựa vào thông tin xác thực an toàn 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 được trình mô phỏng Xác thực chấp nhận. Thông tin xác thực từ các nhà cung cấp không thuộc OpenID Connect không được hỗ trợ.

Đăng nhập bằng email/SMS

Trong ứng dụng sản xuất, luồng đăng nhập qua email và SMS bao gồm hoạt động 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ư được mô tả ở trên , nó tạo mã đăng nhập và xuất chúng đến thiết bị đầu cuối để sử dụng trong quá trình thử nghiệm.

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 Firebase.

Xác thực mã thông báo tùy chỉnh

Trình mô phỏng xác thực không xác thực chữ ký hoặc hết hạn của mã thông báo tùy chỉnh. Điều này cho phép bạn sử dụng mã thông báo thủ công và tái sử dụng mã thông báo vô thời hạn trong các tình huống thử nghiệm và tạo mẫu.

Giới hạn tỷ lệ/chống lạm dụng

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

Chức năng chặn

Trong quá trình sản xuất, người dùng được ghi vào bộ lưu trữ 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ề mặt kỹ thuật, trình mô phỏng Xác thực 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 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 phải lỗi khi thực hiện việc này.

Tiếp theo là gì?