以下内容来自 Firebase 在 2026 年 10 月 23 日的文档。当前限额请以该文档为准。关于基础知识(Firebase 会发送什么、如何测试),请先看测试 Firebase Authentication 邮件。
邮件一直没有收到
没有代码请求发送。 createUserWithEmailAndPassword 只创建账号,不发送邮件。你的注册代码必须为新用户调用 sendEmailVerification。如果没有调用,账号会一直处于未验证状态,测试人员只能白等。
该地址没有账号。 启用邮箱枚举保护后(2023 年 9 月 15 日及之后创建的项目默认开启),sendPasswordResetEmail 只在地址属于某个账号时才发送邮件;不属于时也不会返回错误。用从未注册过的地址测试重置,在你的应用里会显示成功,但收不到任何邮件。请先注册,再重置。
每日限额用完了。 在免费的 Spark 套餐下,Firebase 每天发送 5 次邮件链接登录、150 封密码重置邮件和 1,000 封验证邮件。当天第五次测试后,无密码登录就会停止。为预发布环境开通计费(Blaze),或者节省地测试邮件链接登录。
邮件进了垃圾箱。 默认情况下,邮件来自 noreply@ 你项目的 firebaseapp.com 地址,有些收件箱不信任这个地址。在控制台的邮件模板中设置你自己的域名。Proxy Mail QA 地址无论如何都能收到这些邮件,所以你能分清是“没发送”还是“进了垃圾箱”。
你在使用模拟器。 Auth 模拟器不发送邮件:它会把每个验证、重置和登录链接打印在运行它的终端里,以及 Emulator Suite 的 Logs 标签页中,并通过一个 REST 端点提供给测试使用。上线前请在真实的预发布项目上测试。
注册失败
auth/email-already-in-use: 该地址已有账号。枚举保护不会隐藏这个错误。每次运行都使用新地址。- 注册次数过多: Firebase 允许同一 IP 地址每小时创建 100 个新账号。在一台 CI 机器上运行的测试套件可能超过这个数。你可以在 Firebase 控制台中安排临时提高限额。
- 密码规则: 开启密码策略后,弱密码会以
auth/password-does-not-meet-requirements失败。确保你的表单说明原因。 - 机器人防护: Authentication 上的 reCAPTCHA 防护或 App Check 强制执行可能会拒绝自动化浏览器。对于 App Check,请为测试运行提供调试令牌。
登录失败,报错 auth/invalid-credential
启用枚举保护后,密码错误和地址不存在会返回同一个错误(INVALID_LOGIN_CREDENTIALS,Web SDK 报告为 auth/invalid-credential)。预期 auth/user-not-found 或 auth/wrong-password 的测试会开始失败,为每种情况显示不同提示的应用也一样。请改为检查这一个错误。
链接已点击,但应用仍显示“请验证你的邮箱”
你的应用持有的 User 对象会保留用户登录时的 emailVerified 值。用户在另一个标签页点击链接后,调用 user.reload();如果你的安全规则或后端读取 email_verified 声明,再调用 user.getIdToken(true)。在此之前,应用和规则看到的仍是未验证用户。
链接失效
auth/invalid-action-code或auth/expired-action-code: 链接已被使用或已过期。请求一封新邮件,并使用最新的那封。auth/unauthorized-continue-uri: 你的代码传入的继续 URL 不在授权域名中。在 Authentication、Settings、Authorized domains 下添加每个环境。预览部署会产生新域名,所以每个都需要添加,或者使用固定的预发布域名。- 跳转到 localhost: 继续 URL 来自你的代码。请根据环境设置生成,而不是硬编码
http://localhost。详见为什么邮件链接指向 localhost。
邮件链接登录要求再次输入邮箱
邮件链接登录要在请求链接的那个浏览器中完成:你的应用把地址存在那里(通常在 localStorage 中),链接打开时再读取出来。如果在其他设备或浏览器上打开链接,Firebase 自己的建议是再次询问地址,以防会话固定攻击。这是预期行为。测试人员应在开始流程的地方打开链接。在移动应用中,链接还必须能打开应用;自 Dynamic Links 停用后,这一点的实现方式有所不同:见移动应用的 Firebase 邮件链接登录。
一次全部检查
- 为每个场景创建一个新的 Proxy Mail QA 地址:新用户、密码重置(使用你已注册的地址)、邮件链接登录。
- 在你的应用中走一遍流程。链接会在几秒内出现在该地址的行上;如果一直没出现,说明没有发送任何邮件。
- 查看这一行:指向 localhost 的链接会被标记,收件箱会显示每封邮件的发件人和检查结果。
checkEmail搭配expectHost时,如果链接指向你的网站以外的地方,测试会失败。 - 在同一浏览器中打开链接,然后检查你的应用无需退出再登录就显示用户已验证。
用 Antigravity 或其他 AI 工具构建的?氛围编程应用中的注册和登录问题介绍了生成的应用除此之外常犯的错误。