Firebase Auth何时适合用同步API firebase.auth().currentUser?是否属不良实践?
currentUser 同步API适用场景说明 我们通常推荐优先使用firebase.auth().onAuthStateChanged((user) => { ... })监听认证状态变更,避免Auth实例初始化未完成导致拿到错误的用户状态,但firebase.auth().currentUser同步API确实有合理的使用场景,在这些场景下使用不属于不良实践:
已经监听到认证状态完成初始化后,后续同步获取用户属性的场景
只要你已经通过onAuthStateChanged的回调确认过用户处于登录态,之后所有需要读取当前用户uid、邮箱、displayName等基础属性的操作,都可以直接调用currentUser,不需要重复触发监听逻辑,执行效率更高。比如已登录用户触发提交表单的点击事件时,要获取当前用户的uid关联表单数据,直接读currentUser.uid即可。仅登录态可访问的受保护路由/页面内的所有逻辑
如果你已经做了路由守卫逻辑:只有onAuthStateChanged返回非空用户对象时,才允许用户进入对应页面(比如个人中心、账号设置页),那么在这些受保护页面的所有业务逻辑里,都可以放心调用currentUser,不会出现拿到空值的问题。需要同步传入用户身份参数的关联操作
比如调用Firestore、Storage等其他Firebase服务的接口时,需要同步传入当前用户的uid作为查询条件或者存储路径参数,只要当前运行上下文已经确认是登录态,直接读取currentUser的属性即可,不需要额外做异步等待。
注意:唯一需要避免的不良实践是应用冷启动、Auth实例还没完成初始化的阶段就调用
currentUser,这时候哪怕用户之前已经勾选了“记住登录”,也会大概率拿到空值,这种场景下必须用onAuthStateChanged监听状态完成后再操作。
内容的提问来源于stack exchange,提问作者Bokris Itzhak

