linkWithCredential如何工作?它如何与规则一起使用?

时间:2016-10-02 02:56:26

标签: android firebase firebase-authentication firebase-security

我发现这个documentation解释了如何将匿名用户与新注册用户相关联,但我无法理解它是如何工作的。

从解释中也发现here,我得到了如下的大图(如果我错了,请纠正我):

  1. 使用匿名用户登录:获得userUid(仅作为示例)ANONYM-USER-UID
  2. 用户而不是将数据添加到购物车中,如下所示:
  3. 数据

    -- shoppingCart
        -- ANONYM-USER-UID
           -- <push-id>
              -- itemUid: <item-uid>
              -- count: 2
           -- <push-id>
              -- itemUid: <other-item-uid>
              -- count: 1
        -- OTHER-USER-UID
           -- .......
    

    使用规则:只有适当的UserId才能访问购物车

    "rules": {
       "shoppingCart" {
           "$userUid": {
                ".read": "auth.uid == $userUid"
           }
       }
    }
    
    1. 在结账前,用户“强制”注册/或登录,然后检索AuthCredential,然后检索linkWithCredential。用户而不是使用新的userUID,例如REGISTERED-USER-UID
    2. 问题是,每当客户端代码查询shoppingCart/REGISTERED-USER-UID时,它都会检索shoppingCart/ANONYM-USER-UID的项目列表?规则会允许吗?

      如果应用更复杂的规则,例如规则变为什么,该怎么办? - 只有合适的UserId才能访问购物车,但userUid不得使用blackList子项

      "rules": {
         "shoppingCart" {
             "$userUid": {
                  ".read": "auth.uid == $userUid && root.child('blackList').child($userUid).val() == false"
             }
         }
      }
      

      有了这样的逻辑限制,它会成功返回列表吗?

1 个答案:

答案 0 :(得分:4)

我认为您对匿名用户登录的流程稍微感到困惑,然后将其与新的Auth凭据相关联。以下是我的经历。

当用户以匿名身份登录时,系统会分配一个唯一ID。现在,当用户决定使用一些新的身份验证凭据注册时,所有发生的事情都是之前生成的UID匿名登录的时间被分配或 链接这些新凭据。

所以 实际上没有创建新的UID ,你很高兴。

如果此信息有用,请告诉我。