Firebase 身份验证对象可以处理同时身份验证类型吗?

2023-12-06

这个帖子描述如何将多个帐户绑定到一个帐户$uid in a users收藏。

以下是这些安全规则:

"rules": {
  "users": {
    "$uid": {
      ".write": "auth != null && 
        (data.val() === null || 
        (auth.provider === 'facebook' && auth.id === data.child('facebookUid').val()) || 
        (auth.provider === 'twitter' && auth.id === data.child('twitterUid').val()))"
    }
  },
  "usersMap": {
    "facebook": {
      "$fuid": {
        ".read": "auth != null && auth.provider === 'facebook' && auth.id === $fuid",
        ".write": "auth != null && 
          (data.val() === null || 
          root.child('users').child(data.val()).child('facebookUid').val() == auth.id)"
      }
    },
    "twitter": {
      "$tuid": {
        ".read": "auth != null && auth.provider === 'twitter' && auth.id === $tuid",
        ".write": "auth != null && 
          (data.val() === null || 
          root.child('users').child(data.val()).child('twitterUid').val() == auth.id)"
      }
    }
  }
}

以下是我想象的使用这些规则的实用方法:

  1. A user "Logs in”与他们的 Facebook 帐户。

  2. 是否$fuid存在?如果不添加新的$uid to users。在成功回调中创建一个$fuid under userMap/facebook财产价值为$fuid.uid等于$uid.

  3. 如果确实存在,则忽略该请求并返回“用户已存在”之类的消息。

但是,如果用户想要将另一个帐户绑定到同一个主帐户怎么办$uid?

假设用户仍然使用其 Facebook 帐户登录并想要添加其 Twitter 帐户。让我们再次回顾一下该工作流程......

  1. 用户使用另一个帐户登录。

  2. 是否$tuid存在?不,但是如果auth对象同时持有 Facebook 和 Twitter 会话,那么我们不想创建另一个对象$uid- 相反,我们想要映射$tuid到相同的$uid the $fuid也被映射了。

    • 是否auth对象是否支持访问同时身份验证对象的属性?例如,如果我们同时使用 Facebook 和 Twitter 登录auth.id两者都会有所不同,对吧?

    • 我是否以错误的方式思考这个问题?如何将其他帐户映射到$uid使用上面的安全规则?


如果您想将多个帐户绑定到一个 uid,则需要生成您自己的代币.

例如,您可以使用Firebase.push为每个用户生成唯一的 ID,并在您的令牌中使用这些 ID。这不是简单的事情,因为它要求您具备:

  • 一种独立于身份验证方法存储用户 ID 的方法(cookie?)
  • 使用不同计算机时将身份验证帐户链接在一起的方法

在许多用例中,这甚至可能适得其反;在大多数情况下,用户将使用单一身份验证方法登录,甚至可能希望使用 diff 身份验证方法来创建单独的帐户。因此,除非您有一个依赖于提供商之间共享数据的应用程序,否则可能不值得这么麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 身份验证对象可以处理同时身份验证类型吗? 的相关文章

随机推荐

  • Docker 身份验证:无法获取匿名令牌

    我的 gitlab 运行程序中出现以下错误 错误 授权失败 无法获取匿名令牌 获取 https auth ipv6 docker com token scope repository 3Alibrary 2Fnode 3Apull serv
  • std::async 和对象复制

    我正在尝试std async最终得到如下代码 class obj public int val obj int a val a cout lt lt new obj lt lt endl obj cout lt lt delete obj
  • XPath 中求和与积的聚合函数

    类似于这个问题 http stackoverflow com q 1333558 948404 我想使用XPath来计算结构中产品的总和 如下所示
  • 如何使R中的五大湖与海洋颜色相同?

    我刚开始使用 R 制作地图 我正在尝试制作北美地图 以美国为中心 并希望五大湖的颜色与海洋的颜色相同 我当前的代码默认使它们与国家 州具有相同的颜色 关于如何改变它们的颜色有什么想法吗 也许是不同的底图 当前代码 library cowpl
  • 对列表视图中的项目使用 setOnItemClickListener

    我有一个可以将音频保存在 SD 卡上的应用程序 我创建了一个列表视图 用于从 SD 卡检索文件名 我正在尝试设置一个侦听器 以便在单击文件名时我可以启动另一个播放该文件的意图 当我尝试设置监听器并传入一个新的OnItemClickListe
  • 背包C#实现任务

    我正在尝试在给定条件下编写背包 C 算法 但我总是遇到两个问题 我收到 索引超出数组范围 错误 或者我的结果仅为 0 我找到了几个 Knapsack 实现的代码示例 但无法弄清楚我做错了什么 代码示例 https www programmi
  • JS 库最佳实践:返回未定义或在错误的函数输入时抛出错误?

    当用 JavaScript 编写库时 处理函数无效输入的最标准 最友好 的方法是什么 我的直觉告诉我 返回 undefined 是完全可以的 但是抛出错误实际上更有帮助吗 还是真的不重要 我还可以看到返回 false null 甚至 1 但
  • 无法在 Windows 上使用 Android Studio 1.3.2 调试 NDK 示例

    我有Android Studio 1 3 2 NDK r10e gradle实验插件0 2 0 我已经克隆了ndk 样本仓库并仔细遵循以下说明NDK 预览 包括创建本机配置 当我选择 LLDB 作为调试器并调试 Teapot NDK 示例应
  • 在 webview 控件中显示本地 PDF 文件 - 显示空白 Pdf 文件

    我正在研究 Xamarin Forms UWP 我想在webview控件中显示本地PDF文件 我点击了这两个链接 https developer xamarin com recipes cross platform xamarin form
  • 右键单击停止传播

    如何停止 javascript 中右键单击事件的传播 以便父元素根本检测不到它们 当我单击以下 html 中的链接时 未检测到左键单击 但文档元素将右键单击检测为 单击 事件而不是 contextmenu 事件 我尝试将事件侦听器附加到 m
  • 如何才能完全禁用对assert()的调用?

    我的代码充满了对assert condition 在我使用的调试版本中g g这触发了我的断言 出乎意料的是 在我的发布版本中也触发了相同的断言 即没有编译的版本 g option 如何在编译时完全禁用断言 我应该明确定义NDEBUG在我生成
  • 具有 sql 转义的动态 mysql 查询是否与准备好的语句一样安全?

    我有一个应用程序 通过将动态 mysql 查询与 mysql mysqli 真实转义字符串结合使用 它将大大受益 如果我通过 mysql real escape 运行从用户收到的所有数据 它会和使用 mysql 准备好的语句一样安全吗 是的
  • 从 jQuery Mobile 重置值

    我需要重置我的页面的所有字段元素的值 这些元素是 输入 选择 组合框 复选框和单选组 搜索发现有如下代码 attr value input type checkbox attr checked false select each funct
  • 在 xslt 中添加一个或递增变量

    我想让计数器值根据条件递增 但我无法增加值或向全局变量加 1 我正在使用以下代码
  • Swift 扩展示例

    我本来想知道如何制作这样的东西 UIColor myCustomGreen 这样我就可以定义自己的颜色并在我的应用程序中使用它们 我之前研究过扩展 我认为我可能可以使用它们来解决我的问题 但我不记得到底如何设置扩展 在撰写本文时在 Goog
  • GAE (python) 中是否有与 Rails 的“flash”消息等效的东西?

    Ruby on Rails 有一种方法可以设置消息 例如flash notice and flash error 用户将在下一次机会看到 它对于在用户被重定向时 例如返回到登录页面 时通知用户登录失败等情况特别有用 在 Google App
  • 我应该在带有模板的主题观察者模式中使用动态转换吗

    通过参考文章使用模板实现主题 观察者模式 template
  • 5位数字可以表示的最大值和最小值是多少?以2的补码表示

    假设 2 的补码表示形式的 5 位数字可以表示的最大值和最小值是多少 我是否找到 5 位数字的最小值和最大值 即 00000 但我不确定最大值是多少 然后转换为二进制补码 这听起来很愚蠢 但这是我唯一能想到的 我的最后一个问题是 处理器中存
  • 将 erb 从数据库渲染到视图中问题请帮忙!

    我正在数据库中保存一些 erb 并将其呈现在视图中 如下所示 erb ERB new content render text gt erb result 我在尝试渲染 erb 时遇到错误 该 erb 中的 image tag 保存在数据库中
  • Firebase 身份验证对象可以处理同时身份验证类型吗?

    这个帖子描述如何将多个帐户绑定到一个帐户 uid in a users收藏 以下是这些安全规则 rules users uid write auth null data val null auth provider facebook aut