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

Flutter+Firebase密码认证下author字段为空,如何从users集合获取用户名

问题原因

使用邮箱密码注册 Firebase 账号时,Auth 模块的 displayName 字段默认不会自动赋值,只有注册时主动调用 updateDisplayName 方法设置才会有值,所以你要从自定义的 users 集合拉取用户名的思路是正确的。

修改后的完整代码

void _addMessage(String value) async {
  final user = FirebaseAuth.instance.currentUser;
  if (user != null) {
    // 从users集合拉取当前用户的文档
    final userDoc = await FirebaseFirestore.instance.collection("users").doc(user.uid).get();
    // 注意把这里的'username'替换成你自己users集合里存储用户名的实际字段名
    String userName = userDoc.data()?['username'] ?? "Anonymous";
    // 写入聊天集合
    await FirebaseFirestore.instance.collection("interest_chat").add({
      'author': userName,
      'author_id': user.uid,
      'timestamp': Timestamp.now().millisecondsSinceEpoch,
      'value': value,
    });
  }
}

带异常处理的优化版本

如果需要兼容网络异常、用户文档不存在的场景,可以用以下写法避免方法崩溃:

import 'package:flutter/foundation.dart';

void _addMessage(String value) async {
  final user = FirebaseAuth.instance.currentUser;
  if (user != null) {
    String userName = "Anonymous";
    try {
      final userDoc = await FirebaseFirestore.instance.collection("users").doc(user.uid).get();
      if (userDoc.exists) {
        userName = userDoc.data()?['username'] ?? "Anonymous";
      }
    } catch (e) {
      // 出错时默认用Anonymous,你也可以自行添加日志上报逻辑
      debugPrint('获取用户信息失败: $e');
    }
    await FirebaseFirestore.instance.collection("interest_chat").add({
      'author': userName,
      'author_id': user.uid,
      'timestamp': Timestamp.now().millisecondsSinceEpoch,
      'value': value,
    });
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:48:03