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

Firebase登录时获取存储用户信息失败,user返回undefined求助

问题分析与解决方案

看起来你遇到的核心问题是user.uid返回undefined,导致后续无法关联用户ID存储信息。咱们一步步排查:

1. 最可能的原因:错误获取用户ID

signInWithEmailAndPassword方法的then回调参数是UserCredential对象,而不是直接的User实例。你直接访问user.uid自然会得到undefined——正确的用户ID应该从userCredential.user.uid获取。

修正后的登录代码:

e.preventDefault();
fire.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then((userCredential) => {
  const Username = this.state.username;
  // 这里改用userCredential.user.uid获取用户ID
  this.sendUserinfo(Username, userCredential.user.uid);
}).catch((error) => {
  console.log("HJÄÄÄLP" ,error);
});

2. 验证state中的username是否有效

在调用sendUserinfo之前,先打印this.state.username确认它不是undefined:

console.log("当前输入的用户名:", this.state.username);

如果输出是undefined,说明你的表单输入框没有正确绑定到state的username字段。需要检查输入框的onChange事件,确保它更新state:

// 示例输入框绑定方式
<input 
  type="text"
  placeholder="用户名"
  value={this.state.username}
  onChange={(e) => this.setState({ username: e.target.value })}
/>

3. 检查sendUserinfo函数的实现

确保这个函数正确调用Firebase数据库(Firestore/实时数据库),并且包含错误处理逻辑,避免静默失败。举个Firestore的实现例子:

sendUserinfo = (username, uid) => {
  // 写入users集合,用用户ID作为文档ID
  fire.firestore().collection('users').doc(uid).set({
    username: username
  })
  .then(() => {
    console.log("用户信息存储成功!");
  })
  .catch((error) => {
    console.error("存储失败:", error);
  });
};

如果用实时数据库,代码类似:

sendUserinfo = (username, uid) => {
  fire.database().ref(`users/${uid}`).set({
    username: username
  })
  .then(() => {
    console.log("用户信息存储成功!");
  })
  .catch((error) => {
    console.error("存储失败:", error);
  });
};

4. 检查Firebase权限规则

如果以上都没问题,那可能是数据库权限不足。确保你的规则允许已登录用户写入自己的信息:

  • Firestore规则示例:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}
  • 实时数据库规则示例:
{
  "rules": {
    "users": {
      "$userId": {
        ".read": "$userId === auth.uid",
        ".write": "$userId === auth.uid"
      }
    }
  }
}

按这个顺序排查,应该能解决用户信息无法创建的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:30