Angular Firebase身份验证发出两次,第一次是数据不完整

Angular Firebase身份验证发出两次,第一次是数据不完整,angular,firebase,authentication,angularfire,Angular,Firebase,Authentication,Angularfire,我的角度身份验证使用angularfire auth发出错误数据时遇到问题 身份验证流程非常普通: 将authState用户映射到数据库中的用户文档 通过行为主题发出用户文档更改 用户通过oAuth进行身份验证 数据库中的文档在使用oAuth提供程序的数据登录后更新 DB触发器应用一些附加元数据(例如上次修改) 当用户进行身份验证时,会发生以下情况:行为主体的订户接收到两种发射: 基于oAuth提供程序数据的用户数据(这是不完整的,因为它不包括用户文档中的数据),然后 数据库中的用户文档数据

我的角度身份验证使用angularfire auth发出错误数据时遇到问题

身份验证流程非常普通:

  • 将authState用户映射到数据库中的用户文档
  • 通过行为主题发出用户文档更改
  • 用户通过oAuth进行身份验证
  • 数据库中的文档在使用oAuth提供程序的数据登录后更新
  • DB触发器应用一些附加元数据(例如上次修改)
当用户进行身份验证时,会发生以下情况:行为主体的订户接收到两种发射:

  • 基于oAuth提供程序数据的用户数据(这是不完整的,因为它不包括用户文档中的数据),然后
  • 数据库中的用户文档数据-这是完整的用户数据
  • 因此,第一次发射是不需要的,它不是来自DB的数据。 第二次发射是正确的

    我认为这两种排放的原因是:

    • 首先,oAuth登录后的用户更新导致本地缓存中的更新,该更新随后由可观察的(不完整的用户数据)发出
      • (我已经通过禁用更新进行了测试,第一次发射没有发生)
    • 稍后,DB触发器会更新DB中的文档,当该数据与客户端同步时,该数据会从可观察的用户文档中发出—这次是完整的用户数据
    (未启用持久性,以防产生影响)

    因此,我的问题是:

    • 我对原因的假设正确吗?(本地更新,然后触发更新)
    • 防止第一次本地更新并等待完整文档的最佳方法是什么
    • 我是否应该只检查数据库记录中是否存在属性,而忽略其他更改
    • 这个问题有没有更优雅的解决方案