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

如何在Firebase Firestore中通过用户邮箱获取其uid

通过邮箱获取Firebase用户UID(Flutter + Firestore)

Firebase客户端Auth SDK出于隐私安全限制,没有提供直接通过邮箱查询用户UID的接口。要实现这个需求,最可靠的方式是在用户注册时,把邮箱和UID的映射关系存储到Firestore中,之后通过查询这个映射集合来获取对应UID。

1. 注册时存储邮箱-UID映射

用户完成注册后,将邮箱作为文档ID(方便快速查询),把UID和邮箱存入Firestore的user_emails集合:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

Future<void> saveEmailUidPair() async {
  final currentUser = FirebaseAuth.instance.currentUser;
  if (currentUser == null) return;

  await FirebaseFirestore.instance
      .collection('user_emails')
      .doc(currentUser.email)
      .set({
    'uid': currentUser.uid,
    'email': currentUser.email,
  });
}

2. 通过邮箱查询UID

需要获取UID时,直接查询user_emails集合中对应邮箱的文档:

import 'package:cloud_firestore/cloud_firestore.dart';

Future<String?> fetchUidByEmail(String targetEmail) async {
  try {
    final docSnapshot = await FirebaseFirestore.instance
        .collection('user_emails')
        .doc(targetEmail)
        .get();

    if (docSnapshot.exists) {
      return docSnapshot.data()?['uid'] as String;
    }
    // 邮箱未注册,返回null
    return null;
  } catch (error) {
    print('查询UID失败: $error');
    return null;
  }
}

关键注意事项

  • 安全规则配置:一定要给user_emails集合设置合理的安全规则,防止敏感数据泄露。比如只允许已登录用户查询,且用户只能修改自己的映射:
    match /user_emails/{emailDoc} {
      allow read: if request.auth != null;
      allow write: if request.auth != null && request.auth.token.email == emailDoc;
    }
    
  • 数据同步:如果用户后续修改邮箱,记得同步更新user_emails集合中的文档(删除旧邮箱文档,新增新邮箱的映射),避免数据不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:15