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

Firebase数据库无法正确存储用户与工作室信息的技术咨询

Firebase数据库数据存储问题修复方案

核心问题梳理

  • 函数参数传递错误:saveUser 的参数顺序与调用传入值完全不匹配,且未正确组合 fullName
  • 拼写错误:获取城市值时调用了错误的函数名 getinputVal(应为 getInputVal)
  • 数据引用逻辑错误:stuInfo 是单个对象而非列表,使用 push() 会生成多余随机ID,不符合目标结构
  • 重复表单监听:同一个表单绑定两个submit事件,易引发逻辑冲突
  • 变量未声明:表单取值时未用 let/const 声明变量,造成全局污染

修正后的完整代码

// 初始化数据库引用
const userEntry = firebase.database().ref('/Studiopick/studios/users');
// 若studioId为固定值则直接引用;若为用户关联动态ID,需替换为实际用户UID变量
const stuEntry = firebase.database().ref('/Studiopick/studios/studioId/stuInfo');

// 合并表单提交逻辑,避免重复监听
document.getElementById('studioForm').addEventListener('submit', function(e) {
    e.preventDefault(); // 阻止表单默认刷新行为

    // 处理用户信息
    const firstName = getInputVal('firstName');
    const lastName = getInputVal('lastName');
    const email = getInputVal('email');
    const phoneNumber = getInputVal('phoneNumber');
    const password = getInputVal('password');
    const fullName = `${firstName} ${lastName}`;
    // 示例:用邮箱前缀作为用户名,可根据需求调整
    const userName = email.split('@')[0];

    saveUser(email, fullName, phoneNumber, userName, password);

    // 处理工作室信息
    const address = getInputVal('address');
    const country = getInputVal('country');
    const state = getInputVal('state');
    const city = getInputVal('city'); // 修正拼写错误
    const zip = getInputVal('zip');

    saveStu(address, country, state, city, zip);

    // 可选:重置表单
    this.reset();
});

// 获取表单输入值(增加trim去除首尾空格)
function getInputVal(id) {
    return document.getElementById(id).value.trim();
}

// 保存用户信息到Firebase
function saveUser(email, fullName, phoneNumber, userName, password) {
    const newUserEntry = userEntry.push();
    newUserEntry.set({
        email: email,
        fullName: fullName,
        phoneNumber: phoneNumber,
        userName: userName,
        password: password,
        last_login: Date.now()
    }).catch(error => {
        console.error('用户信息保存失败:', error);
    });
}

// 保存工作室信息到Firebase(直接覆盖stuInfo对象,无需生成随机ID)
function saveStu(address, country, state, city, zip) {
    stuEntry.set({
        address: address,
        country: country,
        state: state,
        city: city,
        zip: zip,
        // 若需要工作室名称,可添加对应字段,例如:
        // studio: getInputVal('studioName')
    }).catch(error => {
        console.error('工作室信息保存失败:', error);
    });
}

额外注意事项

  1. 动态studioId处理:如果studioId不是固定字符串,而是与当前用户关联的UID(比如Firebase Auth用户ID),需修改引用路径:
    const currentUserUid = firebase.auth().currentUser.uid;
    const stuEntry = firebase.database().ref(`/Studiopick/studios/${currentUserUid}/stuInfo`);
    
  2. 密码安全风险:明文存储密码存在严重安全隐患,建议使用Firebase Auth自带的用户认证功能,不要自行存储密码。
  3. 错误调试:代码中添加了.catch()捕获存储失败错误,可通过控制台查看具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:36:23