【问题标题】:Firebase User UID not matching Auth UIDFirebase 用户 UID 与身份验证 UID 不匹配
【发布时间】:2018-04-08 05:05:47
【问题描述】:

我是使用 Firebase 的新手(我正在使用 react-redux-firebase,但不确定这是否与这个问题有关)。我在使用这些标准身份验证规则时遇到问题:

{
   "rules": {
      "users": {
         "$uid": {
            ".read": "$uid === auth.uid",
            ".write": "$uid === auth.uid"
         }
      }
   }
}

这是 Firebase 身份验证仪表板中显示的用户 UID:

但如果我打印出与个人资料/帐户关联的数据,我会得到这个 UID:

由于这种不匹配,登录用户无法读取或写入 firebase 实例。

为什么 UID 不匹配?我该如何解决这个问题?

更新:

看起来1091103… UID 是特定于提供商的,在这种情况下不相关?无法确定。

这可能是实际的身份验证 UID(我是新手,所以仍在尝试弄清楚是什么):

在这种情况下,此 UID 与 Firebase 控制台中的显示相匹配。如果它们匹配,那么权限被拒绝错误的原因是什么?

另一个更新:

这是用户节点。您可以将 UID 视为键:

【问题讨论】:

  • 我认为这是 Provider-specific UID 形式的谷歌登录。不是身份验证 UID
  • users 下检查您是否列出了正确的auth UID,否则您将错误的UID 保存到users 数据库
  • 看起来他们匹配。查看 Firebase 数据库,没有 UID 不匹配。因此,在这种情况下,我不确定为什么会出现权限被拒绝错误。更新了我的问题以反映这一点。
  • 您的用户集合看起来如何?或提供编写用户的代码。
  • 你是用.push写信给users吗?

标签: firebase


【解决方案1】:

这是你现在可以做的规则

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

如果你想检查如下

{
   "rules": {
      "users": {
         "$uid": {
            ".read": "$uid === auth.uid",
            ".write": "$uid === auth.uid"
         }
      }
   }
}

您需要在注册时将用户存储到实时数据库中。以他们的auth.uid 作为键。

【讨论】:

  • 我正在使用外部授权提供商(谷歌,如其中一张截图所示)。根据我一直在阅读的文档——“Firebase 自动创建用户”。如果用户创建/注册自动发生,我想如何“将用户存储到实时数据库”?提供者未在实时数据库中的用户行中设置 UID。
  • 我为我的问题添加了另一个更新,其中包括用户节点的屏幕截图。
猜你喜欢
  • 2019-12-31
  • 2022-01-13
  • 1970-01-01
  • 2018-09-11
  • 2017-12-03
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多