Firebase自定义认证lastSignInTime为null 如何正确更新该字段
自定义Token场景下
lastSignInTime 始终为null的解决方法 字段更新逻辑的核心规则
lastSignInTime 是Firebase Auth内置的用户元数据字段,更新逻辑是服务端写死的:
- 仅当用户通过Firebase官方客户端SDK触发完整的认证流程时,服务端才会自动捕获这次登录事件,把该字段更新为当前时间
- 通过Admin SDK执行的用户创建(
admin.auth().createUser())、用户信息更新(admin.auth().updateUser())操作,以及后端直接生成自定义Token的行为,都不会被判定为有效登录事件,因此不会触发该字段的自动更新 - 该字段没有开放Admin SDK的手动写入权限,没法在创建、更新用户的接口里直接传值修改,就算传入相关参数也会被服务端直接忽略
让字段正确更新的操作路径
- 服务端按原有逻辑生成自定义Token,返回给前端业务系统
- 前端接入对应平台的Firebase客户端SDK,拿到自定义Token后调用官方的自定义Token登录接口完成认证
- Web端对应调用
signInWithCustomToken(auth, customToken) - Android/iOS/Flutter 等平台的自定义Token登录逻辑完全一致
- Web端对应调用
- 认证流程走完后,Firebase Auth服务端会自动标记这次登录行为,把对应用户记录里的
lastSignInTime更新为本次登录的时间。这时候不管是在Firebase控制台查看用户,还是通过Admin SDK拉取用户记录,都能看到正确的登录时间值。
无法接入客户端SDK场景的替代方案
如果业务流程完全没法走Firebase客户端SDK的登录链路,不要尝试强行修改Firebase内置的lastSignInTime字段(官方没有开放对应的修改能力),可以直接在自有业务数据库(如Firestore、内部业务库)中维护独立的用户登录时间戳字段,满足后续查询、统计需求即可。
内容的提问来源于stack exchange,提问作者darkencraft
相关产品推荐
相关产品推荐

