簡體   English   中英

如何使用 Flutter Http 重試客戶端刷新令牌?

[英]How to refresh token with Flutter Http Retry Client?

我正在使用令牌和刷新令牌共享首選項存儲 API 請求結果。 刷新時間為 1 小時。

當令牌過期時,使用 RetryClient 更新令牌,但不會反映在應用程序中。 此過程僅在您刷新頁面時發生。 我在哪里做錯了? 我想要做的是當你給401狀態碼時,它會自動更新背面的令牌並再次發出請求。

Future<HttpResult> post(url,
  {Map<String, String>? headers, String? body}) async {
final client = RetryClient(Client(), retries: 1, when: (response) {
  return response.statusCode == 401 ? true : false;
}, onRetry: (req, res, retryCount) async {
  await refreshToken(); //
});
try {
  final response = await client.post(url, headers: headers, body: body);
  return HttpResult(data: response.body, status: _setStatus(response));
} catch(e) {
}

}

Future addFood(Food food) async {
try {
  final token = SharedManager.instance.getStringValue(SharedKeys.TOKEN);

  Uri endpoint =
      Uri.https(AppConstant.apiServiceUrl, 'foods.json', {"auth": token});

  final jsonModel = jsonEncode(food.toJson());
  final request = await httpClient.post(endpoint, body: jsonModel);

  if (request.status == Status.success) {;
    return "Success";
  }

  return "Don't.";
} catch (e) {}

當我在狀態碼為 401 時返回該方法時,我解決了問題。

Future addFood(Food food) async {
    try {
      final token = SharedManager.instance.getStringValue(SharedKeys.TOKEN);
    
      Uri endpoint =
          Uri.https(AppConstant.apiServiceUrl, 'foods.json', {"auth": token});
    
      final jsonModel = jsonEncode(food.toJson());
      final request = await httpClient.post(endpoint, body: jsonModel);
    
      if (request.status == Status.success) { //enum -> success (200)
        return "Success";
      }if (result.status == Status.unauthorized) { //enum -> unauthrozied (401)
            return addFood(food);
      }
    
      return "Don't.";
    } catch (e) {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM