You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Functions调用generateEmailVerificationLink遇TOO_MANY_ATTEMPTS_TRY_LATER错误

问题描述

将下述代码部署至Firebase Functions后,当auth.user().onCreate事件触发时,调用admin.auth().generateEmailVerificationLink(email)接口出现TOO_MANY_ATTEMPTS_TRY_LATER错误,具体信息如下:

代码示例

import admin = require("firebase-admin");
import functions = require("firebase-functions");
import { info, warn, error } from "firebase-functions/lib/logger";

exports.sendEmailConfirmation = functions
.region("asia-northeast1")
.runWith({ failurePolicy: true })
.auth.user()
.onCreate(async (user) => {

  const auth = admin.auth();
  const email = user.email as string;
  info("email", email);

  try {
    // 问题出在这里
    const confirmLink = await auth.generateEmailVerificationLink(email)
    .then(async (emailLink) => {
      console.log("emailLink");
      console.log(emailLink);
      // 省略其他逻辑
      });
    })
    .catch((error) => {
      return console.log(error);
    });
  } catch (error) {
    console.log(error);
  }
});

错误日志

FirebaseAuthError: 发生内部错误。原始服务器响应: "{"error":{"code":400,"message":"TOO_MANY_ATTEMPTS_TRY_LATER","errors":[{"message":"TOO_MANY_ATTEMPTS_TRY_LATER","domain":"global","reason":"invalid"}]}}"
    at FirebaseAuthError.FirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:44:28)
    at FirebaseAuthError.PrefixedFirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:90:28)
    at new FirebaseAuthError (/workspace/node_modules/firebase-admin/lib/utils/error.js:149:16)
    at Function.FirebaseAuthError.fromServerError (/workspace/node_modules/firebase-admin/lib/utils/error.js:188:16)
解决方案
  • 排查重复触发原因:检查是否存在函数重复部署、onCreate事件被多次触发的情况(比如用户账号创建流程存在重复调用、未清理旧版本函数),避免同一邮箱短时间内被多次触发请求。
  • 添加请求频率限制:用Firestore或Realtime Database记录每个邮箱的请求时间戳,在生成验证链接前判断距离上次请求是否超过设定间隔(比如5分钟),超出间隔再执行生成逻辑。
  • 改用Firebase内置验证邮件:Firebase Auth支持自动发送验证邮件,无需手动生成链接。在控制台Authentication > 模板配置邮件内容后,客户端创建用户时调用sendEmailVerification,或通过Admin SDK创建用户时设置emailVerified: false,系统会自动触发邮件发送。
  • 实现指数退避重试:如果必须手动生成链接,遇到TOO_MANY_ATTEMPTS_TRY_LATER错误时,采用指数退避策略重试(比如首次等待1秒,第二次2秒,第三次4秒,最多重试3次),避免短时间内重复请求。
  • 限制函数并发数:在函数配置中设置maxInstances参数,控制并发执行的实例数量,避免大量实例同时发起请求导致服务端限流。

内容的提问来源于stack exchange,提问作者Kurogoma939

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:35:41