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

Firebase无密码邮箱链接登录报错400 OPERATION_NOT_ALLOWED求助

Firebase无密码邮箱登录返回OPERATION_NOT_ALLOWED错误排查方案

问题描述

已在Firebase项目中配置无密码邮箱登录,按文档实现功能后,调用sendSignInLinkToEmail接口时始终返回OPERATION_NOT_ALLOWED错误。相关代码、请求及错误信息如下:

实现代码

const actionCodeSettings = {
  url: "https://acme.com",
  handleCodeInApp: true,
  dynamicLinkDomain: "acme.com",
};
const response = await firebase.auth().sendSignInLinkToEmail(email, actionCodeSettings);

接口请求

curl 'https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key=XXX' \
...
  --data-raw '{"requestType":"EMAIL_SIGNIN","email":"mugen@acme.co","continueUrl":"https://acme.co","canHandleCodeInApp":true,dynamicLinkDomain:"acme.com"}'

返回错误

{
  "error": {
    "code": 400,
    "message": "OPERATION_NOT_ALLOWED",
    "errors": [
      {
        "message": "OPERATION_NOT_ALLOWED",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}

注:域名已加入Firebase授权列表,尝试过携带/不携带dynamicLinkDomain参数,问题未解决。

排查与解决步骤

  • 确认无密码登录开关状态
    进入Firebase控制台 → 认证 → 登录方法,检查「邮箱链接(无密码登录)」是否启用。注意配置后务必点击保存,避免页面刷新导致状态未同步。

  • 校验API密钥有效性
    确保请求中的API密钥属于当前Firebase项目,且在Google Cloud控制台的API密钥页面中,该密钥已启用「Identity Toolkit API」权限,无额外限制导致接口调用被拦截。

  • 统一continueUrl与配置域名
    代码中actionCodeSettings.url为https://acme.com,但请求里的continueUrl是https://acme.co,二者域名不一致。Firebase要求continueUrl必须与授权域名完全匹配,同时代码与请求中的地址需保持统一,修正为相同的合法域名。

  • 检查动态链接域名配置
    若使用dynamicLinkDomain,需确认该域名已在Firebase控制台「动态链接」模块完成配置并验证所有权。即使不携带该参数,也要清理项目中无效的动态链接配置,避免冲突。

  • 测试其他邮箱地址
    当前测试邮箱mugen@acme.co可能因多次失败请求被标记为异常,换用其他有效邮箱重试,排查是否为账号层面的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:19:01