本页由英文自动翻译。

阅读英文版
Proxy Mail QA

常见的 Firebase 注册和登录问题及修复方法

Firebase Authentication 很少明显报错。从未请求的验证邮件、不愿确认是否存在的地址的重置邮件、已验证却仍显示未验证的用户:每种情况看起来都像什么也没发生。下面说明原因以及该改什么。

更新于

以下内容来自 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/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)。在此之前,应用和规则看到的仍是未验证用户。

链接失效

邮件链接登录要求再次输入邮箱

邮件链接登录要在请求链接的那个浏览器中完成:你的应用把地址存在那里(通常在 localStorage 中),链接打开时再读取出来。如果在其他设备或浏览器上打开链接,Firebase 自己的建议是再次询问地址,以防会话固定攻击。这是预期行为。测试人员应在开始流程的地方打开链接。在移动应用中,链接还必须能打开应用;自 Dynamic Links 停用后,这一点的实现方式有所不同:见移动应用的 Firebase 邮件链接登录。

一次全部检查

  1. 为每个场景创建一个新的 Proxy Mail QA 地址:新用户、密码重置(使用你已注册的地址)、邮件链接登录。
  2. 在你的应用中走一遍流程。链接会在几秒内出现在该地址的行上;如果一直没出现,说明没有发送任何邮件。
  3. 查看这一行:指向 localhost 的链接会被标记,收件箱会显示每封邮件的发件人和检查结果。checkEmail 搭配 expectHost 时,如果链接指向你的网站以外的地方,测试会失败。
  4. 在同一浏览器中打开链接,然后检查你的应用无需退出再登录就显示用户已验证。

用 Antigravity 或其他 AI 工具构建的?氛围编程应用中的注册和登录问题介绍了生成的应用除此之外常犯的错误。

在你的下一次注册测试中试试

免费版,无需信用卡。创建一个地址,看着验证码或链接送达。

免费创建账号打开应用

常见问题

为什么注册后 Firebase 没有发送验证邮件?

用 createUserWithEmailAndPassword 创建账号不会发送任何邮件。你的应用必须为新用户调用 sendEmailVerification,而很多注册表单从不调用。

为什么对未知地址重置密码也显示成功?

启用邮箱枚举保护后(2023 年 9 月 15 日起创建的项目默认开启),Firebase 只在地址有账号时才发送重置邮件,没有账号时也从不提示。请用你先注册过的地址测试重置。

用户已经点击了验证链接。为什么我的应用仍显示用户未验证?

已登录的用户对象会保留登录时的状态。对该用户调用 reload(),如果你的安全规则读取 email_verified,再调用 getIdToken(true);或者重新登录。

免费项目能发送多少封邮件?

在 Spark 套餐下,每天 1,000 封验证邮件、150 封密码重置邮件,以及只有 5 次邮件链接登录。Blaze 套餐会提高这些限额。完整表格见“测试 Firebase Authentication 邮件”。

你的应用是用 AI 工具构建的?选择你的工具

Firebase 是 Google LLC 的商标。 Proxy Mail QA 是独立产品,与上述商标所有者没有隶属关系,也未获得其认可。

对本页有疑问?

可以用任何语言提问。文档可以立即回答,你也可以把问题发给 Proxy Mail QA 团队,他们会用英文回复。