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 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 , đồng thời cài đặt và định cấu hình Local Emulator Suite và xem lại các lệnh CLI của 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 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 giả lập để kiểm tra email / mật khẩu, số điện thoại / SMS và đăng nhập bằng nhà cung cấp danh tính bên thứ ba (chẳng hạn như Google)
  • Xem và chỉnh sửa người dùng được mô phỏng
  • 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
Thực

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

Bản giới thiệu

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 giả lập 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), 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.

Tạo công cụ để ứng dụng của bạn nói chuyện với trình giả lập Xác thực

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)

Phiên bản web 9

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

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

Phiên bản web 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 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 về 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ị 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 các phương pháp verifyIdTokencreateSessionCookie tương ứng) để tạo điều kiện cho 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.

Khi kết nối với trình giả lập Xác thực, bạn sẽ cần chỉ định ID dự án. 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 . Lưu ý rằng bạn không cần sử dụng ID dự án Firebase thực của mình; trình giả lập Xác thực sẽ chấp nhận bất kỳ ID dự án nào.

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

Để bắt đầu tạo mẫu tương tác với trình giả lập Authentication và giao diện người dùng của Emulator Suite, hãy khởi động Firebase Local Emulator Suite.

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

Để 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ách sử dụ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 bằng đ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 được mô phỏng

Để 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 khách sẽ vô hiệu hóa 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.

Nếu không, 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.

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ộ 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 đăng nhập.
  • Ứng dụng của bạn truy xuất thủ công thông tin đăng nhập từ nhà cung cấp bên thứ ba bằng cách sử dụng SDK của bên đó và chuyển các thông tin đăng nhập đó đế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, 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 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 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 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ư 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 ứ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.

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

Đám mây IAM

Firebase Emulator Suite 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 bằng 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ư được 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ể được thực hiện bằng bảng điều khiển Firebase.

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

Tiếp theo là gì?