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

时间:2014-04-05 19:57:32

标签: firebase firebase-security

This post 描述了如何将多个帐户绑定到$uid集合中的单个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. 用户“使用他们的Facebook帐户登录”。

  2. $fuid是否存在?如果没有将新$uid添加到users。在成功回调中,在$fuid下创建一个userMap/facebook,其属性值$fuid.uid也等于$uid

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

  4. 但是如果用户想要将另一个帐户绑定到同一个主人$uid <?h2>,该怎么办?

    假设用户仍然使用他们的Facebook帐户登录并想要添加他们的Twitter帐户。让我们再次浏览该工作流程......

    1. 用户使用其他帐户登录。

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

      • $fuid对象是否支持访问同步身份验证对象的属性?例如,如果我们使用Facebook和Twitter登录auth两者都不同吗?

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

1 个答案:

答案 0 :(得分:4)

如果您想将多个帐户绑定到一个帐户,则需要generate your own tokens

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

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

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