Laravel调用Firebase sendVerificationCode接口报MISSING_CLIENT_IDENTIFIER错误
解决Firebase发送OTP时的MISSING_CLIENT_IDENTIFIER错误
错误原因
MISSING_CLIENT_IDENTIFIER错误是因为Firebase的accounts:sendVerificationCode接口需要验证请求的客户端合法性,仅提供API Key和手机号不足以通过验证,必须补充客户端标识符参数。
解决方案
方法1:添加OAuth客户端ID到请求体
- 登录Firebase控制台,进入项目设置 -> 通用标签页
- 在你的应用(比如Web应用)列表中,找到OAuth 客户端ID(注意不是Web API密钥)
- 修改请求体,新增
client_id字段:
$phone = $request->get('phone'); $apiKey = 'your-web-api-key'; $clientId = 'your-oauth-client-id'; // 从Firebase控制台获取 try { $client = new Client(); $response = $client->post('https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode?key=' . $apiKey, [ 'json' => [ 'phoneNumber' => "+".$phone, 'client_id' => $clientId // 新增客户端ID字段 ] ]); $data = json_decode($response->getBody(), true); // 保存返回的sessionInfo,用于后续验证码验证 } catch (\Exception $e) { // 捕获并处理请求错误 }
方法2:使用reCAPTCHA Token(Web应用推荐)
如果是Web端发起的请求,更安全的方式是先通过reCAPTCHA验证用户身份,再将获取到的token传入请求:
- 前端集成reCAPTCHA v2或v3,获取验证token
- 在请求体中加入
recaptchaToken字段替代client_id:
$response = $client->post('https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode?key=' . $apiKey, [ 'json' => [ 'phoneNumber' => "+".$phone, 'recaptchaToken' => $request->get('recaptcha_token') // 前端传入的reCAPTCHA验证token ] ]);
验证码验证接口实现
发送OTP成功后会返回sessionInfo,使用该参数调用accounts:verifyPhoneNumber接口完成验证:
$sessionInfo = $request->get('session_info'); // 发送OTP时返回的session信息 $code = $request->get('otp_code'); $apiKey = 'your-web-api-key'; try { $client = new Client(); $response = $client->post('https://identitytoolkit.googleapis.com/v1/accounts:verifyPhoneNumber?key=' . $apiKey, [ 'json' => [ 'sessionInfo' => $sessionInfo, 'code' => $code ] ]); $data = json_decode($response->getBody(), true); // 验证成功,可获取idToken等信息用于用户身份认证 } catch (\Exception $e) { // 处理验证码错误或请求失败的情况 }
注意事项
- 确保手机号格式正确,必须包含国际区号(如
+8613xxxxxxxxx) - 确认Firebase控制台中已启用电话认证服务
- API Key使用Firebase项目的Web API密钥,不要与OAuth客户端ID混淆
内容的提问来源于stack exchange,提问作者Ammar Kayali
相关产品推荐
相关产品推荐

