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 Authentication với ứng dụng, hãy đảm bảo rằng bạn hiểu quy trình làm việc Firebase Local Emulator Suite tổng thể, đồ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 bộ 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 Firebase Authentication cho môi trường 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.

Tôi có thể làm gì với trình mô phỏng Authentication?

Trình mô phỏng Authentication cung cấp tính 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 môi trường sản xuất Firebase Authentication. Khi kết hợp với các SDK Firebase dành cho nền tảng Apple, Android và Web, trình mô phỏng này cho phép bạn:

  • Tạo, cập nhật và quản lý các tài khoản người dùng được mô phỏng để kiểm thử tính năng xác thực email/mật khẩu, số điện thoại/SMS, SMS xác thực đa yếu tố và 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
  • Tạo mẫu hệ thống xác thực mã thông báo tuỳ chỉnh
  • Kiểm tra các thông báo liên quan đến 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 bắt đầu trình mô phỏng, trong CLI, hãy chạy firebase use trong thư mục làm việc. Hoặc bạn có thể truyền cờ --project cho mỗi lệnh trình mô phỏng command.

Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực tếbản trình diễn các dự án.

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

Dự án Firebase thực tế là dự án mà 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 tế có các tài nguyên đang hoạt động, chẳng hạn 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 tế, 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 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 đang hoạt động (phiên bản cơ sở dữ liệu, nhóm lưu trữ, hàm, v.v.).

Bản trình diễn

Dự án Firebase bản trình diễn không có cấu hình Firebase thực tế và không có tài nguyên đang hoạt động. Bạn thường truy cập vào các dự án này thông qua codelab hoặc các hướng dẫn khác.

Mã dự án cho các dự án bản trình diễn có tiền tố demo-.

Khi làm việc với các dự án Firebase bản trình diễn, ứng dụng và mã của bạn tương tác với trình mô phỏng chỉ. 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 bản trình diễn bất cứ khi nào có thể. Các lợi ích bao gồm:

  • Dễ thiết lập 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 (sản xuấ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ì bạn không cần truy cập vào 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)

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 mẫu và kiểm thử các tương tác giữa AuthenticationCloud 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 SDKs

Firebase Admin SDKs sẽ 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 thiết lập.

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

Xin lưu ý rằng trình mô phỏng Cloud Functions 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 Cloud Functions và trình mô phỏng Authentication. Biến môi trường sẽ tự động được thiết lập cho Admin SDK trong Cloud Functions.

Khi biến môi trường được thiết lập, Firebase Admin SDK sẽ chấp nhận Mã thông báo nhận dạng chưa ký và cookie phiên do trình mô phỏng Authentication phát hành (thông qua các phương thức verifyIdTokencreateSessionCookie tương ứng) để tạo điều kiện thuận lợi cho việc phát triển và kiểm thử cục bộ. Vui lòng đảm bảo không thiết lập biến môi trường trong môi trường sản xuấ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 đã thiết lập bằng Firebase CLI. Bạn có thể truyền trực tiếp mã dự án đến initializeApp hoặc thiết lập 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 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 cho môi trường sản xuất hoặc SDK của Firebase dành cho quản trị viên đang chạy ở chế độ sản xuất từ chối (ví dụ: hành vi mặc định mà 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 một cách tương tác thông qua Emulator Suite UI và 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 tương tác và không 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

Đối với 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 mẫu 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.

  1. Trong Emulator Suite UI, 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.

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/đăng nhập email bằng đường liên kết email, trình mô phỏng sẽ in một URL vào 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-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 quá 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 khi 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 Emulator Suite UI hoặc mã ứng dụng để quản lý tài khoản người dùng email/mật khẩu , bạn có thể viết các 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 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 các quy trình kiểm thử email và mật khẩu không tương tác, trình tự điển hình như sau.

  1. Tạo người dùng bằng Authentication điểm cuối REST signUp.
  2. Đăng nhập người dùng bằng email và mật khẩu để thực hiện kiểm thử.
  3. Nếu áp dụng cho các hoạt động kiểm thử, 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.

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

Đối với tính năng xác thực đ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ư mô tả cho hoạt động kiểm thử tích hợp (iOS, Android, web).
  • Kiểm thử số điện thoại có mã được định cấu hình trước trong bảng điều khiển Firebase.

Mặt khác, về mã ứng dụng, 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 môi trường sản xuất (iOS, Android, web).

Sử dụng Emulator Suite UI:

  1. Trong Emulator Suite UI, 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 các quy trình xác thực đ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 thân thiện 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 một thiết bị đầu cuối mà bạn đã chạy firebase emulators:start; hãy 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ử xác thực điện thoại không tương tác, hãy sử dụng trình mô phỏng Authentication API REST để truy xuất 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ự điển hình 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 bằng mã xác minh.

SMS xác thực đa yếu tố

Trình mô phỏng Authentication hỗ trợ tạo mẫu và kiểm thử các quy trình xác thực đa yếu tố (MFA) qua SMS có sẵn trong môi trường sản xuất 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 mà tin nhắn SMS yếu tố thứ hai sẽ được gửi đến. 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 (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 bên thứ ba trong ứng dụng iOS, Android hoặc web mà không cần thay đổi mã sản xuất. Để xem ví dụ về các 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 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ộ quy 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 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ừ nhà cung cấp bên thứ ba bằng SDK của bên đó và truyề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 tài liệu ở trên và đảm bảo rằng bạn đã quen thuộc với quy trình mà bạn muốn sử dụng – quy trình do SDK Firebase 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.

Kiểm thử các quy trình IDP do SDK Firebase điều khiển

Nếu ứng dụng của bạn sử dụng bất kỳ quy trình từ đầu đến cuối nào của SDK Firebase, chẳng hạn như OAuthProvider để đăng nhập bằng Microsoft, GitHub hoặc Yahoo, thì đối với hoạt động kiểm thử tương tác, trình Authentication mô phỏng sẽ cung cấp 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ử tính năng 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 cung cấp cục bộ này cũng xuất hiện trong các ứng dụng di động, được hiển thị bằng thư viện webview của nền tảng.

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

Kiểm thử các quy trình 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 các kỹ thuật đăng nhập "thủ công" và gọi signInWithCredentials phương thức 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ế của 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ừ Google Đăng nhập, Apple và các nhà cung cấp khác sử dụng mã thông báo nhận dạng được triển khai dưới dạng Mã thông báo web JSON (JWT). Không hỗ trợ mã truy cập (ví dụ: mã do Facebook hoặc Twitter cung cấp, không phải là JWT) . 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 cung cấp. Đối với các ứ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 từ 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 với mã thông báo nhận dạng mô phỏng cho các tài khoản thay vì thông tin xác thực thực tế.

  1. Kết nối lại hoặc nhận xét phần mã truy xuất idToken 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 tế 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ị hạn ngạch API và giới hạn tốc độ tại IDP.
  2. Thứ hai, hãy sử dụng chuỗi JSON ký tự 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 có 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 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 gọi phương thức signInWithCustomToken trên các nền tảng được hỗ trợ, như mô tả trong tài liệu Xác thực cho môi trường sản xuất.Authentication

Sự khác biệt giữa trình mô phỏng Authentication và môi trường sản xuất

Trình mô phỏng Firebase Authentication mô phỏng nhiều tính năng của sản phẩm cho môi trường 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 tính năng 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 tất cả các quy trình một cách đúng đắn.

Cloud IAM

Bộ mô phỏng Firebase không cố gắng sao chép hoặc tuân thủ 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 Firebase được cung cấp, nhưng trong những trường hợp mà IAM thường được sử dụng, ví dụ: để thiết lập tài khoản dịch vụ gọi Cloud Functions và do đó là 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 phát triển của bạn, tương tự như việc 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, tính năng đăng nhập bằng đường liên kết 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 các quy trình đăng nhập qua bên thứ ba, Firebase Authentication 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ế từ các nhà cung cấp OpenID Connect như Google và Apple được trình mô phỏng Authentication chấp nhận. Không hỗ trợ thông tin xác thực từ các nhà cung cấp không phải OpenID Connect.

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

Trong các ứng dụng cho môi trường sản xuất, 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 Authentication 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 sẽ tạo mã đăng nhập và xuất mã đó ra thiết bị đầu cuối để sử 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 kiểm thử 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 tuỳ chỉnh

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

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 tính năng giới hạn tốc độ hoặc chống hành vi sai trái trong môi trường sản xuất.

Hàm chặn

Trong môi trường sản xuất, người dùng được ghi vào bộ nhớ một lần sau khi cả sự kiện beforeCreatebeforeSignIn được kích hoạt. Tuy nhiên, do hạn chế về kỹ thuật, trình mô phỏng Authentication ghi vào bộ nhớ 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 thực hiện việc này trong môi trường sản xuất.

Bước tiếp theo là gì?