Flutter项目中如何获取Firebase Auth中非当前登录用户的显示名称
实现方案
Firebase Auth客户端SDK出于安全限制,默认不支持直接查询非当前登录用户的身份信息,你可以通过以下两种方式实现需求:
方案一:使用Firestore存储公开用户资料(推荐)
这种方案性能更好,适合帖子/消息列表这类需要批量查询用户信息的场景:
- 注册时同步公开数据:用户注册成功后,除了将显示名写入Auth用户资料,同时同步一份到Firestore的公开用户集合,仅存储需要公开的非敏感信息:
import 'package:firebase_auth/firebase_auth.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; // 注册逻辑执行完成后调用 final currentUser = FirebaseAuth.instance.currentUser; if (currentUser != null) { await FirebaseFirestore.instance .collection('public_users') .doc(currentUser.uid) .set({ 'displayName': currentUser.displayName, // 可追加其他需要公开的字段,如头像链接、注册时间等 }); }
- 配置安全规则:确保用户只能修改自己的公开信息,所有人都可以读取公开信息:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /public_users/{uid} {
allow read: if true;
allow write: if request.auth != null && request.auth.uid == uid;
}
}
}
- 查询指定用户显示名:拿到帖子/消息发布者的uid后,直接查询对应文档即可:
Future<String?> getPublisherDisplayName(String publisherUid) async { final userDoc = await FirebaseFirestore.instance .collection('public_users') .doc(publisherUid) .get(); if (userDoc.exists) { return userDoc.data()?['displayName'] as String?; } return null; }
方案二:通过云函数调用Admin SDK查询
如果你不想额外维护数据库存储用户公开信息,可以用云函数封装Admin SDK的查询能力,客户端调用云函数获取结果:
- 编写可调用云函数:
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.getUserDisplayName = functions.https.onCall(async (data, context) => { const targetUid = data.uid; try { const userRecord = await admin.auth().getUser(targetUid); return { displayName: userRecord.displayName }; } catch (e) { throw new functions.https.HttpsError("not-found", "查询的用户不存在"); } });
- 客户端调用云函数获取结果:
import 'package:cloud_functions/cloud_functions.dart'; Future<String?> getPublisherDisplayName(String publisherUid) async { try { final result = await FirebaseFunctions.instance .httpsCallable('getUserDisplayName') .call({'uid': publisherUid}); return result.data['displayName'] as String?; } catch (e) { return null; } }
内容的提问来源于stack exchange,提问作者sammie carswell
相关产品推荐
相关产品推荐

