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 của bạn, hãy đảm bảo rằng bạn nắm rõ quy trình Firebase Local Emulator Suite tổng thể, bạn cài đặt và định cấu hình Local Emulator Suite và xem lại các lệnh CLI của giao thức này.

Chủ đề này giả định rằng bạn đã quen thuộc với việc phát triển Giải pháp Firebase Authentication cho hoạt động phát hành công khai. Nếu cần, hãy xem tài liệu 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 chế độ mô phỏng cục bộ có độ chân thực cao Firebase Authentication, cung cấp nhiều chức năng có trong phát hành công khai Firebase Authentication. 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 tra email/mật khẩu, số điện thoại/SMS, SMS đa yếu tố và danh tính của bên thứ ba (ví dụ: Google) xác thực nhà cung cấp
  • 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 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 lần chạy CLI firebase use trong thư mục đang hoạt động. Hoặc, bạn có thể chuyển cờ --project cho từng trình mô phỏng .

Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và 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 (rất có thể thông qua bảng điều khiển 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ộ nhớ nhóm, hàm hoặc bất kỳ tài nguyên nào khác mà bạn thiết lập cho Firebase đó dự án.

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 (phiên bản cơ sở dữ liệu, bộ nhớ) nhóm, 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 nào. Các 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.

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ạ, các ứng dụng và mã của bạn sẽ tương tác với chỉ có thể sử dụng 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 phải tạo Dự án Firebase
  • An toàn hơn vì nếu mã của bạn vô tình gọi ra những lệnh 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 của bạn 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 Authentication 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");

Không cần thiết lập thêm để tạo nguyên mẫu và thử nghiệm 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 SDK giây

Firebase Admin SDK tự động kết nối với trình mô phỏng Authentication khi Đã đặt biến môi trường FIREBASE_AUTH_EMULATOR_HOST.

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 để bạn có thể bỏ qua bước này khi thử nghiệm các công cụ tích hợp giữa Trình mô phỏng Cloud FunctionsAuthentication. Biến môi trường sẽ là tự động được đặt cho Admin SDK trong Cloud Functions.

Khi bạn đặt biến môi trường, các Firebase Admin SDK sẽ chấp nhận mã nhận dạng chưa ký Mã thông báo và cookie phiên do trình mô phỏng Authentication phát hành (thông qua verifyIdTokencreateSessionCookie tương ứng) để tạo điều kiện phát triển cục bộ và kiểm thử. 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 bạn muốn mã Admin SDK kết nối với một trình mô phỏng dùng chung chạy trong trong một môi trường khác, bạn sẽ cần chỉ định cùng một mã dự án mà bạn đặt bằng cách sử dụng Giao diện dòng lệnh (CLI) của Firebase. Bạn có thể 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 Authentication sẽ đưa ra mã thông báo mã nhận dạng chưa ký. Mã này chỉ được các trình mô phỏng Firebase khác hoặc SDK Quản trị của Firebase chấp nhận khi đã định cấu hình. Phiên bản phát hành công khai sẽ từ chối những mã thông báo này các dịch vụ của Firebase hoặc SDK quản trị của Firebase chạy ở chế độ phát hành công khai (ví dụ: hành vi mặc định mà không cần làm theo 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à không tương tác thông qua giao diện REST cục bộ. Nội dung 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 Authentication, giao diện REST của trình mô phỏng và Emulator Suite UI, 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 (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 Authentication từ ứng dụng của bạn bằng cách sử dụng 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 rồi điền thông tin xác thực email mới.

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 qua email bằng quy trình liên kết email, trình mô phỏng in 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-key

Dán đường liên kết đó vào trình duyệt để mô phỏng sự kiện xác minh rồi kiểm tra xác minh thành công hay chưa.

{
  "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ự, trong đó có thông số newPassword (bạn có thể thay đổi thông số này 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ì dùng Emulator Suite UI hoặc mã ứng dụng khách để quản lý email/mật khẩu tài khoản người dùng, 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, cũng như tìm nạp mã xác minh email ngoài phạm vi để điền sẵn 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ử và cho phép bạn kiểm thử một cách không tương tác.

Đối với quy trình kiểm tra email và mật khẩu không tương tác, phương pháp trình tự như sau.

  1. Tạo người dùng có điểm cuối REST đăng ký Authentication.
  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 có thể áp dụng cho thử nghiệm của bạn, hãy tìm nạp phương thức xác minh email ngoài phạm vi hiện có mã 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, ứng dụng SDK vô hiệu hoá 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).
  • 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 Firebase.

Nếu không, về mã ứng dụng khách, quy trình xác thực qua điện thoại/SMS giống với quy tắc được mô tả cho phiên bản phát hành công khai (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 thông tin xác thực bằng điện thoại mới.

Tuy nhiên, đối với quy trình xác thực của điện thoại, trình mô phỏng sẽ KHÔNG kích hoạt tính năng phân phố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 hỗ trợ và không phù hợp với thử nghiệm cục bộ! Thay vào đó, trình mô phỏng sẽ in ra mã đã được gửi qua SMS đến cùng thiết bị thanh toán 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 đang 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 dùng trình mô phỏng Authentication REST API để truy xuất mã SMS hiện có. Xin lưu ý rằng mỗi mã sẽ khác nhau 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 Authentication hỗ trợ tạo nguyên mẫu và kiểm thử đa yếu tố SMS quy trình xác thực (MFA) trong 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 xác thực đa yếu tố (MFA) và định cấu hình 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ó đầu ra đến 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.

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 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ã sản xuất. Ví dụ: về quy trình xác thực, hãy tham khảo tài liệu về sự kết hợp giữa các 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 trong một của 2 cách:

  • Ứng dụng của bạn cho phép SDK xử lý toàn bộ quy trình, 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 đăng nhập từ một nhà cung cấp bên thứ ba theo cách thủ công bằng cách sử dụng thông tin đó SDK của bên thứ ba và chuyển các thông tin đăng nhập đó sang 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 hiểu rõ bất kỳ quy trình nào - truy xuất thông tin đăng nhập do Firebase SDK quản lý so với truy xuất thông tin đăng nhập thủ công - bạn muốn để sử dụng. Trình mô phỏng Authentication 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 toàn diện nào trong Firebase SDK, chẳng hạn như OAuthProvider cho đăng nhập bằng Microsoft, GitHub hoặc Yahoo để kiểm tra tương tác, Authentication trình mô phỏng 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 tra xác thực từ các ứng dụng web gọi signinWithPopup hoặc signInWithRedirect. Trang đăng nhập được phân phát tại địa phương 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 webview của nền tảng của bạn.

Trình mô phỏng 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 khi các luồng tiếp tục.

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 "thủ công" các kỹ thuật đăng nhập và gọi đến 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 qua bên thứ ba thực sự và truy xuất thông tin xác 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 để biết thông tin đăng nhập đượ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ụ: những trang do Facebook hoặc Twitter cung cấp mà không phải là JWT) không được đượ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 đối với thử nghiệm 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 ứ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 với mô phỏng Mã thông báo mã nhận dạ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 đánh dấu nội dung nhận xét trong phần mã truy xuất idTokens nhà cung cấp danh tính (IDP); điều này giúp bạn không cần phải nhập tên người dùng và mật khẩu thực trong lúc và giảm bớt các kiểm thử của bạn khỏi hạn mức API và giới hạn tốc độ tại IDP.
  2. Thứ hai, hãy sử dụng chuỗi JSON bằng chữ thay cho mã thông báo cho signInWithCredential. Bằng cách 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 mô phỏng, mã này sẽ xác thực người dùng thành công bằng email foo@example.com tại Google. Hãy coi trường phụ là khoá chính, chuỗi này có thể được thay đổi thành chuỗi bất kỳ, mô phỏng hoạt động đăng nhập của nhiều người dùng. Bạn có thể thay thế firebase.auth.GoogleAuthProvider bằng, chẳng hạn như 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 để bắt chước.

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 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 phát hành công khai.

Sự khác biệt giữa trình mô phỏng Authentication và phiên bản phát hành công khai

Trình mô phỏng Authentication của Firebase mô phỏng nhiều tính năng của phiên bản phát hành công khai của Google. Tuy nhiên, vì bất kỳ loại hệ thống xác thực nào cũng dựa vào phần nhiều vào bảo mật ở nhiều cấp độ (thiết bị, nhà cung cấp bên thứ ba, Firebase, v.v.), trình mô phỏng khó có thể tạo lại đúng tất cả các luồng.

Cloud IAM

Bộ mô phỏng Firebase không cố gắng sao chép hoặc tuân theo bất kỳ Hành vi liên quan đến IAM khi chạy. Trình mô phỏng tuân thủ chính sách bảo mật của Firebase Có quy tắc, nhưng trong các trường hợp thường dùng IAM, ví dụ: thiết lập Cloud Functions tài khoản dịch vụ gọi và theo đó là cá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 vào máy 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, tính năng đăng nhập bằng đường liên kết email phụ thuộc vào Đường liên kết động của Firebase, tất cả những đườ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, Firebase Authentication 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 đăng nhập thực từ nhà cung cấp OpenID Connect như Google và Apple được được trình mô phỏng Authentication chấp nhận. 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 / tin nhắn SMS

Trong ứng dụng chính thức, quy trình đăng nhập bằng email và SMS liên quan đến thao tác trong đó người dùng kiểm tra tin nhắn đã nhận và nhập mã đăng nhập sang 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, nó tạo mã đăng nhập và xuất chúng đến thiết bị đầu cuối để sử dụng trong 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 cố định mã đăng nhập như có thể làm 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 ngày hết hạn của tuỳ chỉnh mã thông báo. Nhờ đó, bạn có thể dùng mã thông báo được làm thủ công và 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 nguyên mẫu.

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 Authentication không sao chép 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 các tính năng AI mới.

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 cả beforeCreatebeforeSignIn sự kiện đượ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 Authentication ghi vào cửa hàng hai lần, một lần sau khi tạo người dùng và khác 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 quá trình sản xuất.

Tiếp theo là gì?