You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter/Android对接非Firebase自定义服务端如何实现持久登录功能

自定义服务端持久登录状态实现思路

底层逻辑说明

你之前用的Firebase Auth本质也是这套逻辑,只是它把服务端、本地存储、请求拦截的逻辑都封装好了,你不需要关心底层实现而已。对接自定义服务端只需要自己把这套流程实现一遍即可。

具体落地步骤

  • 服务端侧准备

    要求你的服务端提供3个必要接口:
    1. 登录接口:校验用户账号/验证码有效性,校验通过后返回访问令牌(Access Token)、刷新令牌(Refresh Token)、用户基础信息。其中Access Token是短期有效凭证(建议有效期15分钟~2小时),用于所有业务接口的身份校验;Refresh Token是长期有效凭证(建议有效期7~30天),仅用于换发新的Access Token。
    2. 令牌刷新接口:传入有效的Refresh Token,返回新的Access Token(如果需要也可以同时返回新的Refresh Token做滚动更新)。
    3. 登出接口:传入Refresh Token,服务端直接作废该令牌,避免被盗用。
  • 客户端本地存储实现

    优先选择加密存储方案存敏感凭证,不要用普通非加密持久化:
    • Flutter端:推荐用 flutter_secure_storage 库,Android原生用 EncryptedSharedPreferences,iOS原生用系统Keychain。
    • 登录成功后,将Access Token、Refresh Token、用户基础信息加密存储到本地。
  • 应用启动状态校验

    应用冷启动时,先读取本地存储的Refresh Token:
    • 读取不到:直接判定为未登录,跳转登录页。
    • 读取到:调用令牌刷新接口换发最新的Access Token,换发成功则判定为已登录,直接进入首页;换发失败(令牌过期、被作废)则清空本地所有存储的凭证,跳转登录页。
  • 全局请求拦截处理

    封装HTTP请求全局拦截器:
    1. 所有发往服务端的业务请求,自动在请求头添加 Authorization: Bearer <你的Access Token>。
    2. 当请求返回401状态码(代表身份凭证无效)时,自动暂停所有 pending 的请求,先调用令牌刷新接口:
      • 刷新成功:更新本地存储的Access Token,将之前失败的请求用新的Token自动重发,用户无感知。
      • 刷新失败:清空本地所有凭证,直接跳转登录页。
  • 登出逻辑处理

    用户主动触发登出时,先调用服务端登出接口作废当前Refresh Token,再清空本地所有存储的凭证,跳转登录页即可。

注意事项

  • 绝对不要存储用户明文密码到本地,全程只存Token类凭证。
  • 必须用加密存储方案存凭证,避免设备Root/越狱后凭证被盗取。
  • 不要把Access Token有效期设置过长,就算泄露也能把风险控制在很小的时间范围内。
  • 服务端需要支持Refresh Token作废能力,用户改密码、异地登录等风险场景下可以主动作废旧令牌,保障账号安全。

内容的提问来源于stack exchange,提问作者RJB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:09:01