ASP.NET MVC集成Firebase短信验证码遇reCAPTCHA SITE_MISMATCH错误求助
解决Firebase sendVerificationCode API的CAPTCHA SITE_MISMATCH错误
错误根源分析
CAPTCHA_CHECK_FAILED : Recaptcha verification failed - SITE_MISMATCH 错误的核心原因是reCAPTCHA令牌的生成环境与Firebase验证时的站点不匹配,或者使用了不符合Firebase要求的reCAPTCHA令牌。
分步解决方案
1. 修正代码中的URL语法错误
你的代码里URL拼接存在语法错误,多余了一个闭合大括号,这会导致请求的API地址无效:
原错误代码:
var url = $"https://www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode?key={_configuration["Firebase:WebApiKey]}"";
修正后:
var url = $"https://www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode?key={_configuration["Firebase:WebApiKey"]}";
2. 验证reCAPTCHA站点密钥的域名配置
- 登录Google reCAPTCHA控制台,找到你正在使用的Site Key对应的项目。
- 检查“域名”列表,确保当前项目的域名(本地调试填
localhost,生产环境填实际域名,注意不要加http://、https://或端口号,非标准端口除外)已被添加。 - 确认没有拼写错误,比如把
localhost写成localost,或者域名末尾多了斜杠。
3. 确保前后端reCAPTCHA密钥配对
- 前端生成reCAPTCHA令牌时使用的Site Key,必须和后端在Firebase/reCAPTCHA控制台中对应的Secret Key属于同一项目,不能混用不同项目的密钥。
- 可以在reCAPTCHA控制台中查看每个Site Key对应的Secret Key,确认配对关系。
4. 使用Firebase Auth SDK生成合规的reCAPTCHA令牌(关键)
Firebase的sendVerificationCode API不支持独立的Google reCAPTCHA v3令牌,必须使用Firebase Auth集成的reCAPTCHA流程生成令牌:
- 前端引入Firebase Auth SDK并初始化应用。
- 创建Firebase reCAPTCHA验证实例:
const recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container', { size: 'invisible', callback: (response) => { // reCAPTCHA验证完成 } }); - 通过Firebase Auth获取验证令牌,再传递给后端:
firebase.auth().signInWithPhoneNumber(phoneNumber, recaptchaVerifier) .then((confirmationResult) => { // 这里生成的令牌会包含符合Firebase要求的reCAPTCHA信息 // 将相关令牌传给后端调用sendVerificationCode API });
如果必须通过后端调用sendVerificationCode,确保传递的recaptchaToken是Firebase Auth流程生成的,而非独立reCAPTCHA服务生成的。
内容的提问来源于stack exchange,提问作者Mohan Singh
相关产品推荐
相关产品推荐

