星期六

Firebase用户中的多种状态与其转换的测试

在FirebaseAuth中应用中用户形态大致被分为3种:有信息用户[有]、匿名用户[匿](默认用户)、未登陆[未]
  • 在未登录时获取的user总是为null
  • 在匿名用户时,获取头像url等将被返回null
  • 在匿名用户时,历遍user.providerData将只有一个厂商为firebase的关联账户
在用户形态中互相转换也需要注意:
  • [未->有]  从未登录转到有信息用户(虽然未尝试,但理所当然是会创建新的ID进行登录)
  • [匿->有]  从匿名用户转到有信息用户
    • 当有信息用户曾经登录过时,匿名用户将会被登出并更换为有信息用户(非link情况,link情况将报错,如下)
    • 经测试,当有信息用户是新用户时,仍然会创建新的用户ID进行登录,正在寻找此解决方案。(此时所利用的是 _auth.signInWithCredential(credential)  进行的用户登录
    • 经过进一步测试,如果是需要从匿名用户转到有信息用户的话,必须从现在匿名用户的user中的linkWithCredential(credential) 成员进行绑定,注意在此时用户信息并不会更新,只有从null直接登录才会登录用户资料,请自行增加用户资料
    • 匿名用户的user中的linkWithCredential(credential) 成员进行转换到已经有信息的账号时,将会弹出一个错误:出现异常:PlatformException (PlatformException(ERROR_CREDENTIAL_ALREADY_IN_USE, This credential is already associated with a different user account., null))
  • [other->未]  当登出时,进入未登录状态,匿名用户若未链接,可能此用户被飘在虚无中
  • [有->匿]  当从未登录进入匿名用户时,创建一个新的匿名用户进行登录(由于匿名用户没有给与credential所以已登录用户是无法绑定匿名用户的 >> 本身有信息用户就包含着一个匿名用户资料
顺带一提,在有信息用户内的 providerData 是这样的:{firebase:<uid> , google.com: <谷歌的专有ID:如123456...>} 而在应用中获取的uid是firebase的。如果是匿名用户,则内部是这样的:{firebase:<uid>}
如果考虑到Firebase有信息用户异常的形态时,或许有以下几种情况:
  • 在登录状态时,在其他设备发生密码修改的操作。
  • 在登录状态时,该用户被删除或删除。
  • 在已经绑定某服务商时,在其他设备实施解绑操作。
在Firebase用户管理中可以对Firebase有信息用户进行以下三项设置:
接下来将进行测试

  • 删除Firebase有信息用户账号时
    • 在删除账号时,实时数据库的数据并不会删除,这是可以预想到的。而这可能会产生数据的沉余。
    • 在删除账号后,客户端并不会发生错误、自动掉线等,用户仍能正常使用,实时数据库数据也能正常读取。
    • 在删除用户后,客户端重新调用登录用户时,并不会跳出请求登录页面,而是自动利用服务商来生成一个新的Firebase有信息用户,此时的用户ID不再是之前删除的用户ID了。再读取数据时也发现数据为空。
  • 停用Firebase有信息用户账号时
    • 在停用账号后,客户端并没有什么反应,数据也能读取。
    • 在停用账号后再从新登陆时,客户端发生错误:出现异常。PlatformException (PlatformException(ERROR_USER_DISABLED, The user account has been disabled by an administrator., null))
    • 此错误发生在://用凭据进行登录
    • var result =await _auth.signInWithCredential(credential);   行中,返回的result也为null
    • 启用账户后从新登陆将如旧运行。





没有评论:

发表评论

 皆さんこんにちは、リュウタツと申します、中国から来ました、AIデザイン学科の一年生です。 私のテーマは「極東の地」です。 実に中国では日本といえば日中戦争を思い出すでしょう、日本に来る前は日本人ってまだ敵なのかな、仲良くできるかなっと思いました。ようやく、去年の4月にこの極東の...