Firebase - 将匿名用户转换为登录用户?

kcm*_*fat 6 authentication facebook anonymous-users firebase

背景:在我的iOS游戏中,我想允许用户在不登录的情况下进行游戏(在Firebase中匿名进行身份验证以保存用户数据),还可以让他们选择使用Facebook登录以解锁其他游戏玩法.

我正在尝试修改此帖子,用匿名登录替换Twitter登录:

"users": {
    "$userid": {
      // Require the user to be logged in, and make sure their current credentials
      // match at least one of the credentials listed below, unless we're creating
      // a new account from scratch.
      ".write": "auth != null && 
        (data.val() === null || 
        (auth.provider === 'facebook' && auth.uid === data.child('facebook/id').val() || 
        (auth.provider === 'anonymous' && auth.uid === data.child('anonymous/id').val()))"
    }
  }
Run Code Online (Sandbox Code Playgroud)

我很困惑转换将如何与这些规则一起使用.特别是说:

  1. 用户匿名进行身份验证,并且能够创建存储在其下的匿名uid的规范用户记录users/"$userid"/anonymous/id.这是允许的,因为用户已通过身份验证并且第一次设置了用户对象(auth != null && data.val() === null).

  2. users/"$userid"/允许任何后续写入,因为经过身份验证的用户的匿名ID存储在用户树(auth != null && (auth.provider === 'anonymous' && auth.uid === data.child('anonymous/id').val()))中.

  3. 用户登录Facebook.现在authData包含尚未写入的facebook uid users/"$userid"/facebook/id.写入该位置失败,因为安全规则不允许.

因此,在facebook身份验证完成之前,匿名用户无法访问facebook uid.在那时,写入是为时已晚,users/"$userid"/facebook/id因为经过身份验证的用户现在是Facebook用户,并且没有在那里写的权限.

我错过了什么吗?关于如何纠正这种情况的任何想法?