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

Token更新时如何实现应用自动登出?

解决思路与实现方案

1. 统一拦截401状态(含HTTP状态码与业务码)

不管后端是返回HTTP 401状态码,还是响应体里的code字段为401,都要触发登出逻辑。直接在postData方法的响应处理里同时检查这两个场景:

.then((response) {
  try {
    // 先检查HTTP层面的401
    if (response.statusCode == 401) {
      Api.logout();
      responseData = {'code': 401, 'message': 'Token失效'};
      return;
    }
    
    responseData = json.decode(response.body);
    
    // 再检查业务返回的401码
    if (responseData['code'] == 401) {
      Api.logout();
      return;
    }

    // 保留正常更新token的逻辑
    if (responseData.containsKey('token') && phoneNumber!.isNotEmpty) {
      authToken = responseData['token'];
      authPhoneNumber = phoneNumber;
    } 
  } catch (error) {
    print('error ${response.statusCode}');
  }
});

2. 实现全局登出方法

在Api类里加一个静态登出方法,专门负责清空认证信息并跳转到登录页:

class Api {
  static String? authToken;
  static String authPhoneNumber = '';

  // 全局登出逻辑
  static void logout() {
    // 清空本地存储的token和用户信息
    authToken = null;
    authPhoneNumber = '';
    
    // 跳转到登录页(Flutter环境下需用全局导航键确保上下文可用)
    // 示例:
    // GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
    // navigatorKey.currentState?.pushNamedAndRemoveUntil('/login', (route) => false);
  }

  // 原postData方法...
}

3. 优化token更新逻辑

避免在错误场景下覆盖有效token,可限定只有特定接口(比如刷新token的接口)才更新authToken:

// 修改token更新条件,仅在刷新token接口返回时更新
if (urlHttp.contains('/refresh-token') && responseData.containsKey('token') && phoneNumber!.isNotEmpty) {
  authToken = responseData['token'];
  authPhoneNumber = phoneNumber;
}

4. 封装全局错误处理(可选)

如果应用有大量API请求,把错误拦截逻辑抽成单独方法,减少重复代码:

static void handleResponseError(int statusCode, Map<String, dynamic>? responseData) {
  if (statusCode == 401 || (responseData != null && responseData['code'] == 401)) {
    logout();
  }
}

然后在postData的响应处理里直接调用:

.then((response) {
  try {
    responseData = json.decode(response.body);
    Api.handleResponseError(response.statusCode, responseData);
    
    // 其他业务逻辑...
  } catch (error) {
    print('error ${response.statusCode}');
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:18:26