Firebase firestore 规则不会从 flutter 应用程序的令牌中获取名称

问题描述 投票:0回答:1

用户注册后,我将 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);

令牌还包含用户名。

enter image description here

这是我要更新的代码

  var ref = FirebaseFirestore.instance
            .collection("players")
            .doc("meanman");

 await ref.update(map);

enter image description here

flutter firebase google-cloud-firestore
1个回答
0
投票

根据您的评论:

如果我删除

request.auth.name == userId
并离开,如果
request.auth != null
更新也有效。

我怀疑你需要使用:

request.auth.uid == userId
//           👆

因为

name
对象中的
auth
与 Firebase 生成的
uid
不同。

© www.soinside.com 2019 - 2024. All rights reserved.