请求解决:通过request.auth.token.name获取字段值时提示未定义错误
解决方案
你报错的核心原因有两个:一是request.auth.token.name这个属性本身不存在,二是你之前的写法错误地把字符串"request.auth.token.name"当成了字段名,而非动态获取用户名作为键。
根据你的需求,先确认用户的用户名存储在认证信息的哪个字段里,再用该值作为键匹配数据,以下是几种常见场景的写法:
场景1:用户名存在用户显示名(displayName)中
如果你的用户是通过Firebase默认认证方式(如邮箱、Google登录)创建的,用户名通常存在request.auth.displayName里,规则代码修改为:
allow create, delete, update: if request.resource.data[request.auth.displayName] == request.auth.uid;
场景2:用邮箱作为用户名
如果你的业务里直接用用户邮箱当用户名,就用request.auth.email作为键:
allow create, delete, update: if request.resource.data[request.auth.email] == request.auth.uid;
场景3:自定义JWT声明中的用户名
如果你使用自定义令牌登录,且在令牌里添加了username自定义字段,就用request.auth.token.username:
allow create, delete, update: if request.resource.data[request.auth.token.username] == request.auth.uid;
额外注意事项
- 确保你使用的认证字段(如displayName、email)不为空,否则规则会因无法获取键值而报错
- 如果你的字段名是经过处理的用户名(比如去掉空格、转义特殊字符),要在规则里做对应字符串处理,示例:
allow create, delete, update: if request.resource.data[request.auth.displayName.replace(" ", "_")] == request.auth.uid;
内容的提问来源于stack exchange,提问作者siflJebatkundy
相关产品推荐
相关产品推荐

