1

我发现这个documentation解释了如何链接匿名用户和新的注册用户,但我无法理解它是如何工作的。linkWithCredential如何工作?它如何与规则一起工作?

从还发现here的解释,我有一个大的画面如下图所示(请纠正我,如果我错了):

  1. 用户登录匿名:有userUid(只是举例)ANONYM-USER-UID
  2. 用户比数据如下图所示添加到购物车:

数据

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

与规则:只有适当用户ID可以访问购物车

"rules": { 
    "shoppingCart" { 
     "$userUid": { 
      ".read": "auth.uid == $userUid" 
     } 
    } 
} 
  • 结帐之前,用户 “被迫” 注册/或登录,AuthCredential则检索然后打电话给linkWithCredential。用户不是使用新userUID例如REGISTERED-USER-UID
  • 的问题是,每当客户端代码查询shoppingCart/REGISTERED-USER-UID将它取回的shoppingCart/ANONYM-USER-UID项目列表?规则是否允许?

    如果应用于更复杂的规则,例如,规则变得 - 只有适当的用户ID可以访问购物车,但userUid绝不能在黑名单孩子

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

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

    回答

    3

    我觉得你对匿名用户登录然后将其与新的身份验证凭证关联起来有些困惑。这是我所经历的。

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

    所以在现实中没有新的UID创建,你是好去。

    请让我知道这个信息是否有帮助。

    +0

    谢谢你解释了很多 – ktutnik