Catch up on highlights from Firebase at Google I/O 2023. Learn more

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 giả lập 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 Bộ giả lập cục bộ Firebase và bạn cài đặt cũng như định cấu hình Bộ giả lập cục bộ 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 giả lập Xác thực?

Trình giả lập Xác thực cung cấp mô phỏng cục bộ có độ trung thự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 nền tảng Apple, Android và Web Firebase SDK, trình giả lập 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 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
  • Nguyên mẫu hệ thống xác thực mã thông báo tùy chỉnh
  • 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 giả lập.

Chọn một dự án Firebase

Bộ giả lập 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 giả lập, trong CLI 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 từng lệnh giả lập.

Bộ giả lập cục bộ 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 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).

Dự án thực có tài nguyên trực tiếp, chẳng hạn như phiên bản cơ sở dữ liệu, bộ chứa lưu trữ, chức năng 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 giả lập 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, bộ chứa 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 phòng thí nghiệm 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 giả lập . 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 giả lập 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 (sản xuất) không được mô phỏng, thì sẽ không có khả năng thay đổi dữ liệu, cách 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 bị ứng dụng của bạn để nói chuyện với trình giả lập

SDK Android, iOS và web

Thiết lập các lớp kiểm tra hoặc cấu hình trong ứng dụng của bạn để tương tác với trình giả lập 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:"localhost", port:9099)

Web version 9

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

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

Web version 8

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

Không cần thiết lập bổ sung để tạo nguyên mẫu và thử nghiệm các tương tác giữa Chức năng xác thực và đá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 giả lập Xác thực được định cấu hình và các trình giả lập 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 giả lập Xác thực khi biến môi trường FIREBASE_AUTH_EMULATOR_HOST được đặt.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

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

Với biến môi trường đã đặt, SDK quản trị Firebase sẽ chấp nhận Mã thông báo ID chưa ký 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 bạn muốn mã SDK quản trị của mình kết nối với trình mô phỏng được chia sẻ đang chạy trong một 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 trực tiếp ID dự án để 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 giả lập Xác thực phát hành mã thông báo ID chưa được ký , mã này chỉ được chấp nhận bởi các trình giả lập Firebase khác hoặc SDK quản trị Firebase khi được định cấu hình . Các mã thông báo này sẽ bị các dịch vụ Firebase sản xuất hoặc SDK quản trị Firebase 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 giả lập

Bạn có thể sử dụng trình giả lập Xác thực một cách tương tác thông qua Giao diện người dùng Bộ giả lập 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 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 giả lập Xác thực, giao diện REST của nó và Giao diện người dùng Bộ giả lập, 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 ).

Đối với 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 của mình bằng các phương thức SDK Xác thực hoặc bằng cách sử dụng Giao diện người dùng Bộ giả lập.

  1. Trong Giao diện người dùng Bộ giả lập, 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 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 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 ).

Để thử nghiệm xác minh email/đăng nhập bằng các luồng liên kết email, trình giả lập in một URL tới thiết bị đầu cuối mà tại đó firebase emulators:start được thực thi.

i  To verify the email address customer@ex.com, follow this link:
http://localhost: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"
  }
}

Để thử nghiệm đặt lại mật khẩu, trình giả lập 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://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

thử nghiệm không tương tác

Thay vì sử dụng Giao diện người dùng Bộ giả lập hoặc mã ứng dụng 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 dải để điền xác minh email giả lập URL. Điều này giữ cho nền tảng và mã kiểm tra tách biệt và 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ừ endpont 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 giả lập để xóa dữ liệu.

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

Đối với xác thực qua điện thoại, trình giả lập Auth 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 máy 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 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, quy trình xác thực điện thoại/SMS giống hệt với quy trình được mô tả cho sản xuất ( iOS , Android , web ).

Sử dụng Giao diện người dùng Bộ giả lập:

  1. Trong Giao diện người dùng Bộ giả lập, 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 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 số đ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 giả lập 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ụ nằm ngoài phạm vi và không thân thiện với thử nghiệm cục bộ! Thay vào đó, trình mô phỏng in ra mã sẽ đượ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ọ.

thử nghiệm không tương tác

Đối với thử nghiệm 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 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ư thường lệ với mã xác minh.

SMS đa yếu tố

Trình giả lập Xác thực hỗ trợ tạo nguyên mẫu và thử nghiệm các luồng xác thực đa yếu tố SMS (MFA) có sẵn trong sản xuất cho iOS , Androidweb .

Khi bạn 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 mà tin nhắn SMS yếu tố thứ hai sẽ được gửi tới. Thông báo được xuất ra cùng một thiết bị đầu cuối mà tại đó 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 giả lập 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 đối với 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 tổ hợp nhà cung cấp và nền tảng khác nhau 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 sau:

  • Ứ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 tương tác với nhà cung cấp IDP bên thứ ba để truy xuất thông tin đăng nhập.
  • Ứ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 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 rằng bạn đã quen thuộc với bất kỳ luồng nào - truy xuất thông tin xác thực do SDK Firebase quản lý so với truy xuất thủ công - mà bạn muốn sử dụng. Trình mô phỏng xác thực hỗ trợ kiểm tra một trong hai cách tiếp cận.

Thử nghiệm các 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 end-to-end SDK Firebase nào, chẳng hạn như OAuthProvider để đăng nhập bằng Microsoft, GitHub hoặc Yahoo, để kiểm tra 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 các ứ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 bên thứ ba giả và thông tin đăng nhập nếu cần khi các luồng tiếp tục.

Kiểm tra luồng IDP với truy xuất thông tin xác thực thủ công

Nếu bạn sử dụng các 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 của bên thứ ba và truy xuất thông tin xác thực của bên thứ ba.

Lưu ý rằng trình giả lập chỉ hỗ trợ xác thực signInWithCredential cho thông tin đăng nhập đượ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.

thử nghiệm 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 của người dùng trên trang đăng nhập do trình mô phỏng cung cấp. Đố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 quy trình 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 đăng nhập thực.

  1. Viết lại hoặc nhận xét một phần mã của bạn để 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 . Sử dụng 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 giả lập, mã này sẽ xác thực thành công người dùng có email foo@example.com tại Google. Hãy coi trường phụ là khóa chính, có thể thay đổi thành bất kỳ chuỗi nào, chế nhạo việc đăng nhập của những người dùng khác nhau. Ví dụ: bạn có thể thay 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 giả lập 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 gọi 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 sản xuất như thế nào

Trình giả lập 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 cũng 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 giả lập khó có thể tạo lại tất cả các luồng một cách chính xác.

IAM đám mây

Bộ giả lập 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 để chạy. Trình giả lập tuân thủ Quy tắc bảo mật Firebase được cung cấp, nhưng trong các 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 Chức năng đám mây và do đó, các quyền, trình giả lập 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 tập lệnh cục bộ trực tiếp.

Vì trên nền tảng di động, đăng nhập liên kết email phụ thuộc vào Liên kết động Firebase, 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 các luồng đăng nhập của bên thứ ba, Xác thực Firebase dựa vào thông tin đăng nhập an toàn từ các nhà cung cấp bên thứ ba như Twitter và Github.

Thông tin đăng nhập 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 phải OpenID Connect không được hỗ trợ.

Đăng nhập email/SMS

Trong các ứng dụng sản xuất, luồng đăng nhập email và SMS liên quan đến hoạt động không đồng bộ trong đó người dùng kiểm tra thư đã nhận và nhập mã đăng nhập vào giao diện đăng nhập. Trình giả lập 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 , nó tạo mã đăng nhập và xuất chúng ra thiết bị đầu cuối để sử dụng trong thử nghiệm.

Trình giả lập không hỗ trợ khả năng xác định số điện thoại thử nghiệm với 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 giả lập Xác thực không xác thực chữ ký hoặc thời hạn sử dụng 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à sử dụng lại 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 giả lập Xác thực không sao chép các tính năng chống lạm dụng hoặc hạn chế tốc độ sản xuất.

chức năng chặn

Trong 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 hạn chế về kỹ thuật, trình giả lập Xác thực ghi vào bộ lưu trữ hai lần, một lần sau khi người dùng tạo 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 trong quá trình sản xuất.

Tiếp theo là gì?