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

Firebase实时数据库用户ID存为undefined及数据覆盖问题求助

问题解决:Firebase实时数据库用户节点显示undefined并被覆盖

核心问题分析

你的代码存在两个关键错误:

  • Firebase Auth用户的唯一标识属性是uid,而非id,所以user.id会返回undefined,导致所有用户数据被写入user/undefined节点,每次创建新用户都会覆盖该节点内容。
  • createUserWithEmailAndPassword方法仅接受auth实例、邮箱、密码三个参数,你额外传入的schoolID属于无效参数,不会被处理。

修正后的代码

import { initializeApp } from "https://www.gstatic.com/firebasejs/9.13.0/firebase-app.js";
import { getDatabase, set, ref } from "https://www.gstatic.com/firebasejs/9.13.0/firebase-database.js";
import { getAuth, createUserWithEmailAndPassword } from "https://www.gstatic.com/firebasejs/9.13.0/firebase-auth.js";

// 替换为你的Firebase项目配置
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  databaseURL: "YOUR_DATABASE_URL",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
  appId: "YOUR_APP_ID"
};

// 初始化Firebase服务
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const database = getDatabase(app);

// 注册逻辑
signup.addEventListener('click',(e) => {
    e.preventDefault(); // 阻止表单默认提交,避免页面刷新
    var username = document.getElementById('signup-user').value;
    var email = document.getElementById('signup-email').value;
    var schoolID = document.getElementById('signup-id').value;
    var password = document.getElementById('signup-pwd').value;
    
    createUserWithEmailAndPassword(auth, email, password)
        .then((userCredential) => {
            const user = userCredential.user;

            // 使用用户uid作为节点名称,写入用户数据
            set(ref(database, `user/${user.uid}`), {
                username: username,
                schoolID: schoolID,
                email: email
            })
            .then(() => {
                alert('用户创建成功!');
            })
            .catch((dbError) => {
                alert('写入数据库失败:' + dbError.message);
            });
        })
        .catch((error) => {
            alert('注册失败:' + error.message);
        });
});

额外优化提示

  • 添加e.preventDefault()避免表单默认提交导致的页面刷新,保证注册流程完整执行。
  • 为数据库写入操作单独添加错误捕获,可更精准定位数据存储环节的问题。
  • 使用模板字符串user/${user.uid}拼接路径,比字符串拼接更清晰易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:15:40