用户注册后,我将 firebase 用户显示名称更改为用户提供的昵称,并以该名称创建一个文档。但是当我尝试更新文档时,它很刺痛
code=PERMISSION_DENIED, description=Missing or insufficient permissions.
。如果我从规则中删除 request.auth.name == userId
,它就可以正常工作。用户显示名称保存在 firebase 上,因为当我注销并重新登录时,我会得到相同的用户显示名称。
如何解决这个问题?
我的规则
allow update: if request.auth != null && request.auth.name == userId;
allow delete: if false;
allow read,create: if request.auth != null;
更新后,我使用
getIdToken
重新验证令牌
await user.updateDisplayName(username);
var token = await user.getIdToken(true);
令牌还包含用户名。
这是我要更新的代码
var ref = FirebaseFirestore.instance
.collection("players")
.doc("meanman");
await ref.update(map);
根据您的评论:
如果我删除
并离开,如果request.auth.name == userId
更新也有效。request.auth != null
我怀疑你需要使用:
request.auth.uid == userId
// 👆
因为
name
对象中的 auth
与 Firebase 生成的 uid
不同。