【问题标题】:How to retry api request once the refreshtoken api is called?调用 refreshtoken api 后如何重试 api 请求?
【发布时间】:2022-11-28 14:09:01
【问题描述】:

嗨,我在 dart 中使用 http 拦截器来处理 refreshtoken, 一旦使用拦截器调用 refreshtoken api 并获得新的访问令牌,我如何再次调用 api 请求。

   class ExpiredTokenRetryPolicy extends RetryPolicy {
   @override
   Future<bool> shouldAttemptRetryOnResponse(ResponseData response) async {
   if (response.statusCode == 401) {
   await GetFitbitAccessToken().getAccessToken();
   return true;
    }

   return false;
    }
   }


              ------------------------------------

Client client = InterceptedClient.build(
interceptors: [
  FitbitApiInterceptor(),
 ],

 retryPolicy: ExpiredTokenRetryPolicy(),
);

【问题讨论】:

  • 当您收到第一个不记名令牌时,通常会在其中到期。您可以使用该时间查看令牌是否仍然有效,如果时间已经过去,则意味着需要使用刷新令牌获取新令牌。

标签: flutter dart http interceptor refresh-token


【解决方案1】:

基本上你需要错误 401(UnAuthorized) 并不一定意味着令牌已经过期所以我相信你应该有一个刷新令牌来处理这种情况。如果您的 API 有刷新令牌,则执行此操作。

class ExpiredTokenRetryPolicy extends RetryPolicy {
   @override
   Future<bool> shouldAttemptRetryOnResponse(ResponseData response) async {
   if (response.statusCode == 200) {
  // do your normal request
   return true;
    }else if(response.statusCode =401){
     //for POST
    ///within the header add this
     headers: {'grant_type': 'refresh_token', 'refresh_token': 
      '$refresh_token'});
      token = jsonDecode(response.body)['token'];
      refresh_token = jsonDecode(response.body)['refresh_token'];
      return true;
   }

   return false;
    }
   }

【讨论】:

  • 您好,感谢您的回复,等待 GetFitbitAccessToken().getAccessToken();我调用刷新令牌 api 的方法,新值将存储在共享首选项中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2022-01-22
  • 2020-03-19
  • 2020-07-07
  • 2016-01-08
  • 2023-03-16
相关资源
最近更新 更多