- 在未登录时获取的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
- 启用账户后从新登陆将如旧运行。
没有评论:
发表评论