本页面提供了问题排查帮助,并解答了有关使用 Firebase Authentication 的常见问题。如果您找不到想要的内容或需要其他帮助,请与 Firebase 支持团队联系。
哪些地区支持电话身份验证?
Firebase Authentication 在全球范围内支持电话号码验证,但并不是所有网络都能可靠地传递验证消息。以下区域的短信送达率很高,电话身份验证应该可以正常运行。如上所述,有些运营商由于短信送达成功率很低而无法在某个区域提供服务。
| 区域 | 代码 |
|---|---|
| AD | 安道尔 |
| AE | 阿拉伯联合酋长国 |
| AF | 阿富汗 |
| AG | 安提瓜和巴布达 |
| AL | 阿尔巴尼亚 |
| AM | 亚美尼亚 |
| AO | 安哥拉 |
| AR | 阿根廷 |
| AS | 美属萨摩亚 |
| AT | 奥地利 |
| AU | 澳大利亚 |
| AW | 阿鲁巴 |
| AZ | 阿塞拜疆 |
| BA | 波斯尼亚和黑塞哥维那 |
| BB | 巴巴多斯 |
| BD | 孟加拉国 |
| BE | 比利时 |
| BF | 布基纳法索 |
| BG | 保加利亚 |
| BJ | 贝宁 |
| BM | 百慕大 |
| BN | 文莱达鲁萨兰国 |
| BO | 玻利维亚 |
| BR | 巴西 |
| BS | 巴哈马 |
| BT | 不丹 |
| BW | 博茨瓦纳 |
| BY | 白俄罗斯 |
| BZ | 伯利兹 |
| CA | 加拿大 |
| CD | 刚果(金) |
| CF | 中非共和国 |
| CG | 刚果(布) |
| CH | 瑞士 |
| CI | 科特迪瓦 |
| CK | 库克群岛 |
| CL | 智利 |
| CM | 喀麦隆 |
| CO | 哥伦比亚 |
| CR | 哥斯达黎加 |
| CV | 佛得角 |
| CW | 库拉索 |
| CY | 塞浦路斯 |
| CZ | 捷克 |
| DE | 德国 |
| DJ | 吉布提 |
| DK | 丹麦 |
| DM | 多米尼克 |
| DO | 多米尼加共和国 |
| DZ | 阿尔及利亚 |
| EC | 厄瓜多尔 |
| EG | 埃及 |
| ES | 西班牙 |
| ET | 埃塞俄比亚 |
| FI | 芬兰 |
| FJ | 斐济 |
| FK | 福克兰群岛(马尔维纳斯群岛) |
| FM | 密克罗尼西亚联邦 |
| FO | 法罗群岛 |
| FR | 法国 |
| GA | 加蓬 |
| GB | 英国 |
| GD | 格林纳达 |
| GE | 格鲁吉亚 |
| GF | 法属圭亚那 |
| GG | 根西岛 |
| GH | 加纳 |
| GI | 直布罗陀 |
| GL | 格陵兰 |
| GM | 冈比亚 |
| GP | 瓜德罗普 |
| GQ | 赤道几内亚 |
| GR | 希腊 |
| GT | 危地马拉 |
| GY | 圭亚那 |
| HK | 中国香港特别行政区 |
| HN | 洪都拉斯 |
| HR | 克罗地亚 |
| HT | 海地 |
| HU | 匈牙利 |
| ID | 印度尼西亚 |
| IE | 爱尔兰 |
| IL | 以色列 |
| IM | 马恩岛 |
| IN | 印度 |
| IQ | 伊拉克 |
| IT | 意大利 |
| JE | 泽西岛 |
| JM | 牙买加 |
| JO | 约旦 |
| JP | 日本 |
| KE | 肯尼亚 |
| KG | 吉尔吉斯斯坦 |
| KH | 柬埔寨 |
| KM | 科摩罗 |
| KN | 圣基茨和尼维斯 |
| KR | 韩国 |
| KW | 科威特 |
| KY | 开曼群岛 |
| KZ | 哈萨克斯坦 |
| LA | 老挝人民民主共和国 |
| LB | 黎巴嫩 |
| LC | 圣卢西亚 |
| LI | 列支敦士登 |
| LK | 斯里兰卡 |
| LS | 莱索托 |
| LT | 立陶宛 |
| LU | 卢森堡 |
| LV | 拉脱维亚 |
| LY | 利比亚 |
| MA | 摩洛哥 |
| MD | 摩尔多瓦 |
| ME | 黑山 |
| MF | 圣马丁(法国) |
| MG | 马达加斯加 |
| MK | 马其顿共和国 |
| MM | 缅甸 |
| MN | 蒙古 |
| MO | 中国澳门特别行政区 |
| MS | 蒙特塞拉特 |
| MT | 马耳他 |
| MU | 毛里求斯 |
| MW | 马拉维 |
| MX | 墨西哥 |
| MY | 马来西亚 |
| MZ | 莫桑比克 |
| NA | 纳米比亚 |
| NC | 新喀里多尼亚 |
| NE | 尼日尔 |
| NF | 诺福克岛 |
| NG | 尼日利亚 |
| NI | 尼加拉瓜 |
| NL | 荷兰 |
| NO | 挪威 |
| NP | 尼泊尔 |
| NZ | 新西兰 |
| OM | 阿曼 |
| PA | 巴拿马 |
| PE | 秘鲁 |
| PG | 巴布亚新几内亚 |
| PH | 菲律宾 |
| PK | 巴基斯坦 |
| PL | 波兰 |
| PM | 圣皮埃尔和密克隆群岛 |
| PR | 波多黎各 |
| PS | 巴勒斯坦地区 |
| PT | 葡萄牙 |
| PY | 巴拉圭 |
| QA | 卡塔尔 |
| RE | 留尼汪岛 |
| RO | 罗马尼亚 |
| RS | 塞尔维亚 |
| RU | 俄罗斯联邦 |
| RW | 卢旺达 |
| SA | 沙特阿拉伯 |
| SC | 塞舌尔 |
| SE | 瑞典 |
| SG | 新加坡 |
| SH | 圣赫勒拿 |
| SI | 斯洛文尼亚 |
| SK | 斯洛伐克 |
| SL | 塞拉利昂 |
| SN | 塞内加尔 |
| SR | 苏里南 |
| ST | 圣多美和普林西比 |
| SV | 萨尔瓦多 |
| SZ | 斯威士兰 |
| TC | 特克斯和凯科斯群岛 |
| TG | 多哥 |
| TH | 泰国 |
| TL | 东帝汶 |
| TM | 土库曼斯坦 |
| TO | 汤加 |
| TR | 土耳其 |
| TT | 特立尼达和多巴哥 |
| TW | 中国台湾 |
| TZ | 坦桑尼亚联合共和国 |
| UA | 乌克兰 |
| UG | 乌干达 |
| US | 美国 |
| UY | 乌拉圭 |
| UZ | 乌兹别克斯坦 |
| VC | 圣文森特和格林纳丁斯 |
| VE | 委内瑞拉玻利瓦尔共和国 |
| VG | 英属维尔京群岛 |
| VI | 美属维尔京群岛 |
| VN | 越南 |
| WS | 萨摩亚 |
| YE | 也门 |
| YT | 马约特岛 |
| ZA | 南非 |
| ZM | 赞比亚 |
| ZW | 津巴布韦 |
Spark 定价方案的免费短信有何变化?
自 2024 年 9 月起,为了提高手机身份验证的安全性和服务质量,Firebase 项目必须与 Cloud Billing 账号相关联,才能启用和使用短信服务。
如何在使用手机身份验证时防止短信滥用?
为了保护您的项目免受短信流量激增和 API 滥用的影响,请按以下步骤操作:
请考虑设置短信区域政策
-
查找发送短信数量非常多且验证短信数量非常少(或为零)的区域。已验证/发送成功率就是成功率。 健康的成功率通常在 70-85% 范围内,因为短信不是一种有保证的传送协议,而且某些区域可能存在滥用行为。成功率低于 50% 意味着发送的短信很多,但成功登录的次数很少,这是作恶方和短信流量激增的常见现象。
使用短信区域政策来拒绝成功率较低的短信区域,或者如果您的应用仅打算在某些市场中分发,则仅允许某些区域。
限制已获授权的身份验证网域
使用身份验证设置信息中心管理已获授权的网域。默认情况下,系统会将 localhost 网域添加到已获批准的身份验证网域中,以简化开发。请考虑从生产项目的授权网域中移除 localhost,以防止作恶方在其 localhost 上运行代码以访问您的生产项目。
启用并强制执行 App Check
启用 App Check 可以证明请求仅来自与项目关联的应用,从而帮助您保护项目免遭 API 滥用。
如需将 App Check 与 Firebase Authentication 搭配使用,您必须升级到 Firebase Authentication with Identity Platform。
请注意,您需要在 Firebase 控制台中针对 Authentication 强制执行 App Check(请考虑在强制执行之前监控流量)。此外,请仔细检查 reCAPTCHA Enterprise 批准的网站列表,验证其是否仅包含您的生产网站,以及您在 App Check 中注册到项目的应用列表是否准确。
请注意,App Check 会断言调用来自您的某个注册应用,从而帮助您防范自动攻击。它不会阻止用户以非预期方式使用您的应用(例如,启动然后就完全不再完成登录流程来生成发送的短信)。
电话号码是否已转入电话验证支持的新运营商?
此时,在运营商之间转网的号码将导致所有短信无法送达这些最终用户。目前没有解决方法,Firebase 正在努力解决此问题。
在我的 Android 应用中,我为什么会收到以下错误:
Google sign in failed ?
Google sign in failed如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
GoogleFragment: Google sign in failed
com.google.android.gms.common.api.ApiException: 13: Unable to get token.
at
com.google.android.gms.internal.auth-api.zbay.getSignInCredentialFromIntent(com.google.android.gms:play-services-auth@@20.3.0:6)
确保已正确启用 Google 登录作为身份验证提供方:
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,停用 Google 登录方法,然后重新启用(即使已启用):
打开 Google 登录方法,将其停用,然后点击保存。
重新打开 Google 登录方法,将其启用,然后点击保存。
确保您的应用使用的是其最新的 Firebase 配置文件 (
google-services.json)。
获取应用的配置文件。检查您是否仍遇到该错误。如果是,请继续往下执行后续的问题排查步骤。
确保所需的基础 OAuth 2.0 客户端已存在。
在 Apple 平台应用中,我为什么会收到以下错误:
You must specify <clientID> in <GIDConfiguration> ?
You must specify <clientID> in <GIDConfiguration>如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
You must specify |clientID| in |GIDConfiguration|
确保已正确启用 Google 登录作为身份验证提供方:
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,停用 Google 登录方法,然后重新启用(即使已启用):
打开 Google 登录方法,将其停用,然后点击保存。
重新打开 Google 登录方法,将其启用,然后点击保存。
确保您的应用使用的是其最新的 Firebase 配置文件 (
GoogleService-Info.plist)。
获取应用的配置文件。检查您是否仍遇到该错误。如果是,请继续往下执行后续的问题排查步骤。
确保所需的基础 OAuth 2.0 客户端已存在。
在我的 Web 应用中,我为什么会遇到以下错误:
AuthErrorCode.INVALID_OAUTH_CLIENT_ID ?
AuthErrorCode.INVALID_OAUTH_CLIENT_ID如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
AuthErrorCode.INVALID_OAUTH_CLIENT_ID
确保已正确启用 Google 登录作为身份验证提供方:
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,停用 Google 登录方法,然后重新启用(即使已启用):
打开 Google 登录方法,将其停用,然后点击保存。
重新打开 Google 登录方法,将其启用,然后点击保存。
此外,在 Authentication 部分的 Google 登录提供方配置中,确保 OAuth 客户端 ID 和密钥与 Google Cloud 控制台的凭据页面中显示的 Web 客户端相匹配(请查看 OAuth 2.0 客户端 ID 部分)。
在我的 Web 应用中,为什么使用重定向登录失败并出现以下错误:
This domain YOUR_REDIRECT_DOMAIN is not
authorized to run this operation ?
This domain YOUR_REDIRECT_DOMAIN is not
authorized to run this operation如果您遇到以下错误,请按照此常见问题解答中的问题排查步骤操作:
This domain YOUR_REDIRECT_DOMAIN is not authorized to run this operation.
导致此错误很可能是因为重定向网域未列为 Firebase Authentication 的已获授权的网域,或者您用于 Firebase Authentication 服务的 API 密钥无效。
首先确保 YOUR_REDIRECT_DOMAIN 位于 Firebase 项目的已获授权的网域列表中。如果重定向网域已在此处列出,请继续对无效 API 密钥进行问题排查。
默认情况下,Firebase Authentication JS SDK 依赖于 Firebase 项目的 API 密钥(标记为 Browser key),并使用此密钥根据已获授权的网域列表来验证登录重定向网址是否有效。Authentication 会根据您访问 Authentication SDK 的方式获取此 API 密钥:
如果您使用 Hosting 提供的 Auth 帮助程序通过 Authentication JS SDK 让用户登录,则 Firebase 在您每次部署到 Firebase Hosting 时都会自动获取 API 密钥以及 Firebase 配置的其余部分。确保您的 Web 应用
firebaseConfig中的authDomain已正确配置为使用该 Hosting 网站的其中一个网域。如需验证这一点,您可以访问https://authDomain__/firebase/init.json,然后检查projectId是否与firebaseConfig中的此项匹配。如果您自行托管登录代码,则可以使用
__/firebase/init.json文件向自行托管的 Authentication JS SDK 重定向帮助程序提供 Firebase 配置。此配置文件中列出的 API 密钥和projectId应与您的 Web 应用firebaseConfig匹配。
检查以确保此 API 密钥未被删除:前往 Google Cloud 控制台中的 API 和服务 > 凭据面板,其中列出了您的项目的所有 API 密钥。
如果
Browser key未被删除,请检查以下各项:确保 Firebase Authentication API 在要访问的密钥的允许 API 列表中(详细了解 API 密钥的 API 限制)。
如果您自行托管登录代码,请确保
__/firebase/init.json文件中列出的 API 密钥与 Google Cloud 控制台中的 API 密钥匹配。如有必要,请更正该文件中的密钥,然后重新部署应用。如果
Browser key已被删除,您可以让 Firebase 为您生成新的 API 密钥:在 Firebase 控制台中,依次前往settings > 项目设置 ,然后在您的应用部分中,点击您的 Web 应用。此操作会自动创建一个 API 密钥,您可以在 Web 应用的 SDK 设置和配置部分中看到该密钥。
请注意,在 Google Cloud 控制台中,这个新的 API 密钥不会称为
Browser key;而是与您的 Firebase Web 应用的别名相同。如果您决定向这个新的 API 密钥添加 API 限制,请确保 Firebase Authentication API 位于允许的 API 列表中。创建新的 API 密钥后,请完成以下适用的步骤:
如果您使用预留的 Hosting 网址,请将您的应用重新部署到 Firebase,以便它可以自动获取新的 API 密钥以及 Firebase 配置的其余部分。
如果您自行托管登录代码,请复制新的 API 密钥并将其添加到
__/firebase/init.json文件中,然后重新部署应用。
如何手动构建 OAuth Web 客户端?
打开 Google Cloud 控制台中的凭据页面。
在页面顶部,依次选择创建凭据 > OAuth 客户端 ID。
如果系统提示您配置权限请求页面,请按照屏幕上的说明操作,然后执行此常见问题解答的以下步骤。
创建 OAuth Web 客户端:
对于应用类型,选择 Web 应用。
对于已获授权的 JavaScript 来源,添加以下内容:
http://localhosthttp://localhost:5000https://PROJECT_ID.firebaseapp.comhttps://PROJECT_ID.web.app
对于已获授权的重定向 URI,请添加以下内容:
https://PROJECT_ID.firebaseapp.com/__/auth/handlerhttps://PROJECT_ID.web.app/__/auth/handler
保存 OAuth 客户端。
将新的 OAuth 客户端 ID 和客户端密钥复制到剪贴板。
在 Firebase 控制台中,打开 Authentication 部分。
在登录方法标签页中,打开 Google 登录提供方,然后粘贴您刚刚在 Google Cloud 控制台中构建和复制的 Web 服务器客户端 ID 和密钥。点击保存。
当用户使用电子邮件地址和密码注册时,如何确定可发送给用户的确认电子邮件的电子邮件模板的 %APP_NAME%?
在 2022 年 12 月之前,电子邮件模板中的 %APP_NAME% 会填充 OAuth 品牌名称,每当 Android 应用在 Firebase 项目中注册时,系统都会自动预配该名称。现在,由于 OAuth 品牌仅在启用 Google 登录功能时才预配,因此下面将介绍如何确定 %APP_NAME%:
如果 OAuth 品牌名称可用,则电子邮件模板中的
%APP_NAME%将是 OAuth 品牌名称(与 2022 年 12 月之前的行为相同)。如果 OAuth 品牌名称不可用,则确定电子邮件模板中
%APP_NAME%的方式如下:对于 Web 应用,
%APP_NAME%将是默认的 Firebase Hosting 网站名称(.firebaseapp.com和.web.app之前的值,通常是 Firebase 项目 ID)。对于移动应用:
如果请求中包含 Android 软件包名称或 iOS 软件包 ID,则
%APP_NAME%将(分别)是 Play 商店或 App Store 中使用的应用名称。否则,
%APP_NAME%将是默认的 Firebase Hosting 网站名称(.firebaseapp.com和.web.app之前的值,通常是 Firebase 项目 ID)。
请注意,如果默认的 Firebase Hosting 网站名称查询失败,则最终的后备方法是使用 Firebase 项目 ID 作为
%APP_NAME%。