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

PHP调用Firebase生成Custom Token始终返回null如何解决

核心问题原因

你调用createCustomToken返回的$customToken不是字符串或数组类型,而是Lcobucci\JWT\Token\Plain实例对象,直接用json_encode序列化该对象时只会得到空JSON,这不是配置错误,是输出方式不对。

直接修复方案

把输出token的代码改为强制转字符串即可,该类已经内置了__toString()方法,能直接返回完整的JWT令牌串:

// 原错误写法
// Log::debug(json_encode($customToken));
// 修正后写法
Log::debug((string) $customToken);

如果需要把token放入数组返回给客户端,也要先转成字符串再放入数组:

$returnData = [
    'code' => 0,
    'firebase_token' => (string) $customToken
];
return json_encode($returnData);
其他可选排查项

如果转字符串后依然拿不到有效token,按以下顺序排查:

  • 先确认$activatedOfferwall['UserHash']不为空,提前打印该值校验,用户标识为空会导致token生成失败
  • 确认服务账号JSON文件配置正确且可读,\App\Model\Constants\FirebaseConstants::JSON_FILE对应的文件路径不存在权限错误
  • 增加异常捕获逻辑,定位具体报错原因:
try {
    $activatedOfferwall = $session->read('ActiveOfferwall');
    $factory = (new Factory)->withServiceAccount(\App\Model\Constants\FirebaseConstants::JSON_FILE)->withDatabaseUri(\App\Model\Constants\FirebaseConstants::DEFAULT_URL);
    $auth = $factory->createAuth();
    $customToken = $auth->createCustomToken($activatedOfferwall['UserHash']);
    Log::debug((string) $customToken);
} catch (\Exception $e) {
    Log::error('Firebase token生成失败:' . $e->getMessage());
}

注意:你当前的生成阶段问题和Firebase安全规则无关,安全规则是客户端携带token访问Firebase资源时才会触发校验,不需要在这个阶段排查规则配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:27:01