如何在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
相关产品推荐
相关产品推荐

