Firebase ID令牌过期后,匿名登录用户是否仍可访问Cloud Firestore?
问题核心解答
你描述的场景下,用户依然可以正常通过对应的安全规则校验,获得Cloud Firestore的访问权限,不会因为ID令牌满1小时过期、用户没有主动重新登录就立刻失去访问能力。
背后的运行机制
- 首先要区分两个容易混淆的概念:本地持久化的用户登录会话、短期有效的ID凭证
- 调用
signInAnonymously完成登录后,Firebase Auth SDK会将这个匿名用户的身份信息加密存储在客户端本地,只要没有主动触发登出操作、没有被系统清除本地应用存储、没有被服务端判定会话异常失效,这个登录状态会一直存续,不会因为单次ID令牌到期就直接把用户踢出登录态。
- 调用
- 其次SDK内置了完全自动的ID令牌刷新逻辑
- 不需要用户做任何操作,SDK会在当前ID令牌即将到期的窗口期,自动在后台调用接口换取新的有效ID令牌;哪怕错过了最佳刷新时机、等到现有令牌完全过期,只要本地会话还存在,SDK也会在应用发起下一次数据库请求前,先静默完成令牌刷新,再把请求带出去。
- 最后对应安全规则的判定逻辑
- 你配置的
allow read, write: if request.auth != null;规则,服务端校验的从来不是用户最初登录时拿到的那枚ID令牌,而是每一次请求时实际携带的、经过签名验证的有效令牌。只要SDK能成功刷新到合法的新令牌附在请求里,request.auth字段就不为空,规则校验自然会通过。
- 你配置的
会导致访问被拒绝的实际场景
只有当出现以下情况时,用户才会无法通过规则校验:
- 本地的匿名登录会话被销毁:比如用户清除应用本地数据、卸载重装应用、主动调用
signOut接口退出登录,SDK不再持有可以用来刷新令牌的会话凭证 - 网络长期不可用:设备长期处于离线状态,SDK完全无法连接Firebase Auth服务端完成令牌刷新,当本地缓存的最后一个有效令牌超过服务端认可的时效后,恢复网络后发起的请求如果没能及时完成刷新,就会被规则拦截
内容的提问来源于stack exchange,提问作者Ibrahim Ali
相关产品推荐
相关产品推荐

