Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Trước khi sử dụng trình giả lập Authentication với ứng dụng của bạn, hãy đảm bảo rằng bạn hiểu quy trình làm việc tổng thể của Firebase Local Emulator Suite và bạn cài đặt cũng như định cấu hình Local Emulator Suite và xem lại các lệnh CLI của nó.

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 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 của các dịch vụ Xác thực Firebase, cung cấp nhiều chức năng được tìm thấy trong Xác thực Firebase sản xuất . Được ghép nối với các nền tảng Apple, Android và Web Firebase SDK, 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 giả lập để 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 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 một 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 duy nhất.

Để chọn dự án để 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 mỗi lệnh giả lập.

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
Có thật

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

Các dự án thực có cá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, nhóm 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, 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. Các dự án này thường được truy cập thông qua codelabs 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, các ứ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 không được mô phỏng (sản xuất), 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.

Điều khiển ứng dụng của bạn để nói chuyện với trình giả lập

Android, iOS và SDK web

Thiết lập cấu hình trong ứng dụng hoặc các lớp thử nghiệm của bạn để tương tác với trình giả lập Xác thực như sau.

Android
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 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 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 dành cho quản trị viên

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ẽ được đặt tự động cho SDK quản trị trong Chức năng đám mây.

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

Nếu bạn muốn mã SDK quản trị viên của mình kết nối với trình mô phỏng dùng chung đang 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 cách sử dụng Firebase CLI . Bạn có thể chuyển một ID dự án để initializeApp ứng dụng trực tiếp 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 ký , 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ị từ chối bởi các dịch vụ Firebase sản xuất hoặc SDK quản trị Firebase đang 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 giả lập

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

Để kiểm tra việc đặt lại mật khẩu, trình giả lập in một URL tương tự, bao gồm thông số newPassword (bạn có thể thay đổi nếu cần), vào thiết bị đầu cuối.

http://localhost: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 hoặc mã ứng dụng của Emulator Suite để 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 băng tần để đ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 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 với điểm cuối Authentication signUp REST .
  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 băng tần có sẵn từ endpont REST dành riêng cho trình mô phỏng.
  4. Xóa các bản ghi của 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 giả lập

Để xác thực đ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 giả lập, SDK ứng dụng sẽ tắt các phương pháp xác minh này theo cách tương tự như cách được mô tả để kiểm tra tích hợp ( iOS , Android , web ).
  • Kiểm tra số điện thoại với mã được định cấu hình trước trong bảng điều khiển Firebase.

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

Sử dụng UI Suite Emulator:

  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 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 đ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 giả lập 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ọ.

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ã 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 điểm cuối REST dành riêng cho trình mô phỏng .
  3. Xác nhận cuộc confirmationResult.confirm(code) như bình thường với mã xác minh.

SMS đa yếu tố

Trình giả lập 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ố SMS (MFA) có sẵn trong phiên bản sản xuất cho iOS , Androidweb .

Khi bạn thêm một người dùng giả 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. Thông báo được xuất đến 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 của bạn mà không có thay đổi nào so với mã sản xuất. Để biết ví dụ về quy trình xác thực, hãy tham khảo tài liệu để biết các kết hợp khác nhau củ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 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 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 lấy 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 đó đến 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ỳ quy trình nào - do Firebase SDK quản lý 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 giả lập 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 do SDK Firebase điều khiển

Nếu ứng dụng của bạn sử dụng bất kỳ luồng end-to-end nào của SDK Firebase, như OAuthProvider để đăng nhập bằng Microsoft, GitHub hoặc Yahoo, để kiểm tra tương tác, thì trình giả lập Authentication 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 của nền tảng của bạn.

Trình giả lập 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 kỹ thuật đăng nhập "thủ công" và gọi phương thức signInWithCredentials trên nền tảng của mình, 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 đăng nhập thực 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ừ ​​Google Sign-In, 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ụ: những mã được cung cấp bởi Facebook hoặc Twitter, 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 để kiểm tra không tương tác là tự động hóa các lần nhấp 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 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 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 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 ID giả cho tài khoản thay vì thông tin đăng nhập thực.

  1. Tua lại hoặc nhận xét phần mã của bạn để lấy 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 quá trình kiểm tra của bạn, đồng thời loại bỏ các thử nghiệm của bạn khỏi hạn ngạch API và giới hạn tỷ lệ tại IDP.
  2. Thứ hai, sử dụng một chuỗi JSON theo nghĩa đen 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ụ như một khóa chính, có thể được 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. Bạn có thể thay thế firebase.auth.GoogleAuthProvider bằng, ví dụ: 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 giả mạo.

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 với 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 giả lập 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 chủ yếu dựa 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.

Đá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 để 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 tình huống mà IAM thường được sử dụng, chẳng hạn như để đặt Chức năng đám mây gọi tài khoản dịch vụ và do đó, 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 nền tảng di động, đăng nhập liên kết email dựa vào Liên kết động Firebase, tất cả các liên kết như vậy sẽ được mở trên intead nền tảng web (di động).

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

Đối với quy trình đă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 giả lập 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 ứng dụng sản xuất, quy trình đăng nhập qua email và SMS liên quan đến 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 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 tới thiết bị đầu cuối để sử dụng trong 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 với mã đăng nhập cố định như có thể được 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 các 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 được tạo thủ công và tái sử dụng mã thông báo vô thời hạn trong các kịch bản tạo mẫu và thử nghiệm.

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 hạn chế tốc độ sản xuất hoặc chống lạm dụng.

Tiếp theo là gì?