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

如何在PHP Firebase用户注册时设置自定义用户声明?

解决PHP Firebase注册时设置用户角色的问题

完全可以在注册用户时同步设置角色,你的问题出在两个核心点:一是错误尝试把role_as直接塞进Firebase Auth的用户属性(Auth不支持自定义顶层属性);二是没正确获取刚创建用户的ID来调用setCustomUserClaims。

核心修正思路

Firebase Auth创建用户后会返回包含用户ID(uid)的对象,你需要用这个ID来设置自定义角色声明。如果需要持久化存储角色信息(比如用于前端展示或复杂查询),可以同步把角色写入Firebase实时数据库或Firestore。

修正后的代码

if(isset($_POST['register_btn']))
{
    $fullname = $_POST['full_name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $role = $_POST['role_as'];

    // Firebase Auth只支持官方定义的用户属性,移除自定义的role_as
    $userProperties = [
        'email' => $email,
        'emailVerified' => false,
        'phoneNumber' => '+63'.$phone,
        'password' => $password,   
        'displayName' => $fullname,
    ];

    if($role == "registrar")
    {
        // 创建用户并获取返回的用户对象
        $createdUser = $auth->createUser($userProperties);

        if($createdUser)
        {
            // 使用刚创建用户的uid作为setCustomUserClaims的参数
            $auth->setCustomUserClaims($createdUser->uid, ['registrar' => true]);
            
            // 可选:若需将角色存入数据库(如Realtime DB),添加以下代码
            // $database->getReference('users/' . $createdUser->uid)->set([
            //     'full_name' => $fullname,
            //     'role' => $role
            // ]);

            $_SESSION['status'] = "User created successfully.";
            header('Location: login.php');
            exit();
        }
        else
        {
            $_SESSION['status'] = "User creation failed.";
            header('Location: register.php');
            exit();
        }
    }
}

关键说明

  • createUser返回的$createdUser对象自带uid字段,这就是你需要的用户ID,直接用它替换未定义的$key即可。
  • Firebase Auth的自定义声明(setCustomUserClaims)主要用于权限控制,比如后端验证用户角色、通过ID Token传递角色信息给前端。
  • 若要存储角色的详细信息,需单独写入Firebase实时数据库或Firestore,Auth的用户属性仅支持官方预设字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:45:29