将您的应用连接到 Authentication 模拟器

在将 Authentication 模拟器用于您的应用之前,请确保您了解 Firebase Local Emulator Suite 的整体工作流,而且已安装和配置 Local Emulator Suite 并已查看其 CLI 命令。

本主题假设您已熟悉如何开发用于生产环境的 Firebase Authentication 解决方案。如果需要,请参阅有关平台和身份验证方法组合的文档。

Authentication 模拟器的用途

Authentication 模拟器可以对 Firebase Authentication 服务进行高准确度本地模拟,能提供正式版 Firebase Authentication 的大部分功能。该模拟器可与 Apple 平台、Android 和 Web 版 Firebase SDK 结合使用,支持您执行以下操作:

  • 创建、更新和管理模拟用户账号,用于测试电子邮件地址/密码、电话号码/短信、短信多重身份验证和第三方(例如 Google)身份提供方身份验证
  • 查看和修改模拟用户
  • 进行自定义令牌身份验证系统原型设计
  • 在模拟器界面内的“日志”标签页中,查看与身份验证相关的消息。

选择一个 Firebase 项目

Firebase Local Emulator Suite 模拟的是单个 Firebase 项目的产品。

如需选择要使用的项目,请在启动模拟器之前,使用 CLI 在工作目录下运行 firebase use。或者,您也可以向每个模拟器命令传递 --project 标志。

Local Emulator Suite 支持模拟实际 Firebase 项目和演示项目。

项目类型 特性 与模拟器结合使用
实际项目

实际 Firebase 项目就是您创建和配置的项目(很可能是通过 Firebase 控制台创建和配置)。

实际项目具有实时资源,例如数据库实例、存储桶、函数或您为该 Firebase 项目设置的任何其他资源。

使用实际的 Firebase 项目时,您可以为任何或所有受支持的产品运行模拟器。

对于您未模拟的任何产品,您的应用和代码都将与实时资源(数据库实例、存储桶、函数等)交互。

演示

演示 Firebase 项目没有实际 Firebase 配置,也没有实时资源。通常可通过 Codelab 或其他教程来访问这些项目。

演示项目的 ID 带有 demo- 前缀。

使用演示 Firebase 项目时,您的应用和代码仅与模拟器交互。如果您的应用尝试与您没有为其运行模拟器的资源进行交互,该代码将失败。

我们建议您尽可能使用演示项目。演示项目具有以下优势:

  • 设置更简单,您无需创建 Firebase 项目也可运行模拟器
  • 安全性更强,就算您的代码意外调用了非模拟(生产环境)资源,也不可能发生数据更改、使用资源或产生费用
  • 提供更好的离线支持,无需访问互联网即可下载您的 SDK 配置。

对您的应用进行插桩 (instrument) 处理以与模拟器通信

Android、iOS 和 Web SDK

按照以下步骤设置您的应用内配置或测试类,以便与 Authentication 模拟器进行交互。

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");

无需进行额外设置,即可对 Authentication 与 Cloud Functions 或者 Cloud Firestore 或 Realtime Database 的 Firebase Security Rules 之间的交互进行原型设计和测试。如果 Authentication 模拟器配置完毕时有其他模拟器正在运行,它们会自动协同工作。

Admin SDK 秒

设置 FIREBASE_AUTH_EMULATOR_HOST 环境变量后,Firebase Admin SDK 会自动连接到 Authentication 模拟器。

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

请注意,Cloud Functions 模拟器会自动识别 Authentication 模拟器,因此在测试 Cloud Functions 模拟器与 Authentication 模拟器之间的集成时,您可以跳过此步骤。系统会自动在 Cloud Functions 中为 Admin SDK 设置该环境变量。

设置好该环境变量后,Firebase Admin SDK 将接受由 Authentication 模拟器签发的未签名 ID 令牌和会话 Cookie(分别通过 verifyIdToken 和 createSessionCookie 方法签发),以便于进行本地开发和测试。切勿在生产环境中设置该环境变量。

如果您希望 Admin SDK 代码连接到在其他环境中运行的共享模拟器,则需要指定您使用 Firebase CLI 设置的同一项目 ID。您可以直接将项目 ID 传递给 initializeApp 或设置 GCLOUD_PROJECT 环境变量。

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
环境变量
export GCLOUD_PROJECT="your-project-id"

ID 令牌

出于安全考虑,Authentication 模拟器会签发未签名的 ID 令牌,只有其他 Firebase 模拟器或进行了相应配置的 Firebase Admin SDK 才会接受这些令牌。而生产环境中的 Firebase 服务或在生产模式下运行的 Firebase Admin SDK(例如,未进行上述设置步骤的默认行为)会拒绝这些令牌。

启动模拟器

您可以通过 Emulator Suite UI 以交互方式使用 Authentication 模拟器,也可以通过其本地 REST 接口以非交互方式使用该模拟器。以下部分介绍了交互式和非交互式使用场景。

如需启动 Authentication 模拟器、其 REST 接口和 Emulator Suite UI,请执行以下命令:

firebase emulators:start

对于匿名身份验证,您的应用可以采用适用于您的平台(iOS、Android、Web)的登录逻辑。

对于电子邮件地址/密码身份验证,您可以使用 Authentication SDK 方法或 Emulator Suite UI 从您的应用向 Authentication 模拟器添加用户账号,以开始原型设计。

  1. 在 Emulator Suite UI 界面中,点击 Authentication 标签页。
  2. 点击添加用户按钮。
  3. 按照用户账号创建向导中的说明,填写电子邮件身份验证字段。

创建测试用户后,您的应用可以使用适用于您的平台(iOS、Android 和 Web)的 SDK 逻辑让用户登录或退出登录。

为了测试通过邮件链接流进行的邮件验证/登录,该模拟器会将网址输出到执行 firebase emulators:start 的终端。

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

将链接粘贴到浏览器中以模拟验证事件,并检查验证是否成功执行。

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"