Flutter模拟器打开应用时Token过期,如何修改代码刷新Token?
Flutter Token过期自动刷新解决方案
针对你遇到的“Expired Token”问题,核心问题出在handleResponse方法的401状态码处理逻辑——当前代码仅尝试重新登录但未更新本地Token,也未重新发起原请求。以下是具体修改方案:
关键修改点
1. 扩展handleResponse方法参数
添加原请求的必要参数,用于Token刷新后重新发起请求:
// 修改方法签名,新增请求相关参数 Future handleResponse(Response response, String endPoint, {HttpMethod method = HttpMethod.GET, Map? request, bool? avoidTokenError}) async { if (!await isNetworkAvailable()) { throw errorInternetNotAvailable; } // 新增递归防护:如果已尝试过刷新,直接抛出错误避免无限循环 if (response.statusCode == 401) { if (avoidTokenError == true) { throw TokenException('Token刷新失败,请重新登录'); } if (userStore.isLoggedIn) { try { // 使用存储的账号密码发起登录请求刷新Token Map<String, dynamic> req = { 'username': userStore.userEmail, 'password': userStore.userPassword, }; var loginResult = await authApi.logInApi(req); // 更新本地存储的Token(假设loginResult包含token字段,根据实际接口调整) userStore.token = loginResult['token']; // 若接口返回用户信息,可同步更新userStore的其他字段 // userStore.userEmail = loginResult['email']; // 重新发起原请求 Response newResponse = await buildHttpResponse(endPoint, method: method, request: request); // 递归处理新响应,标记avoidTokenError防止无限刷新 return handleResponse(newResponse, endPoint, method: method, request: request, avoidTokenError: true); } catch (e) { throw TokenException(e.toString()); } } else { throw '请登录后重试'; } } // 原有成功/错误处理逻辑保持不变 if (response.statusCode.isSuccessful()) { return jsonDecode(response.body); } else { try { var body = jsonDecode(response.body); throw parseHtmlString(body['message']); } on Exception catch (e) { log(e); throw errorSomethingWentWrong; } } }
2. 修改buildHttpResponse的调用逻辑
在buildHttpResponse方法末尾,将原请求参数传递给handleResponse:
// 替换原return response;的逻辑 return handleResponse(response, endPoint, method: method, request: request);
修改后流程说明
- 当接口返回401(Token过期)时,先检查用户是否已登录
- 使用存储的账号密码调用登录接口获取新Token
- 更新本地
userStore中的Token - 重新发起之前失败的请求
- 若刷新Token失败(如密码错误),抛出错误引导用户重新登录
注意事项
- 确保
authApi.logInApi接口返回的数据包含有效Token,且字段名与代码中loginResult['token']一致 - 若你的应用存储的是加密后的密码,需先解密再发起登录请求
- 测试时可故意让Token过期,验证是否能自动刷新并正常加载页面
内容的提问来源于stack exchange,提问作者Pat Kyu
相关产品推荐
相关产品推荐

