Firestore REST API按指定邮箱查询用户UID请求报错求助
解决Firestore REST API按邮箱过滤查询UID的格式问题
正确的:runQuery请求配置
先确认请求端点、Headers和Payload完全符合Firestore REST规范,以下是针对你的场景可直接复用的配置:
请求基本信息
- 请求方法: POST
- URL:
https://firestore.googleapis.com/v1/projects/project-123/databases/(default)/documents:runQuery - Headers:
Authorization: Bearer {你的Firebase服务端令牌}Content-Type: application/json
正确的Payload示例
假设users集合中文档的email字段存储用户邮箱,且你需要返回匹配邮箱的文档ID(即UID):
{ "structuredQuery": { "select": { "fields": [ { "fieldPath": "__name__" } ] }, "from": [ { "collectionId": "users" } ], "where": { "fieldFilter": { "field": { "fieldPath": "email" }, "op": "EQUAL", "value": { "stringValue": "target@example.com" } } } } }
关键注意事项
- 字段与值类型匹配:
email字段路径要和Firestore中存储的字段名完全一致,值类型需对应(邮箱是字符串,所以用stringValue)。 - __name__的作用:
__name__是Firestore保留字段,代表文档ID(即你要的UID),如果需要返回其他字段,直接添加对应fieldPath即可。 - Directus端适配: 在Directus中调用该接口时需确保:
- 正确传递Authorization令牌(可通过Directus环境变量存储Firebase服务端密钥,调用令牌生成接口获取)
- 请求的
Content-Type严格设为application/json,避免Payload解析错误 - 不对Payload做额外URL编码或转义,直接以JSON格式发送
常见错误排查
如果仍报格式错误,检查以下几点:
structuredQuery层级是否正确(比如where下必须嵌套fieldFilter,不能直接写条件)- 操作符
op的取值是否为Firestore支持的全大写枚举值(比如EQUAL、LESS_THAN等) from数组中是否正确指定collectionId为users,无拼写错误
内容的提问来源于stack exchange,提问作者bandungeuy
相关产品推荐
相关产品推荐

