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

时间:2016-02-01 22:32:05

标签: facebook authentication firebase anonymous-users

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

我试图修改this post,用匿名登录替换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()))"
    }
  }

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

  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包含尚未写入users/"$userid"/facebook/id的facebook uid。写入该位置失败,因为安全规则不允许。

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

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

0 个答案:

没有答案