dio拦截器 flutter_在Dio中使用拦截器使Flutter刷新令牌

本文介绍了在Flutter中使用Dio库时,如何通过Interceptor处理令牌过期问题。当接收到403错误时,代码会更新令牌并尝试重新发送请求。然而,当前实现存在一个问题,Dio并未使用新令牌重复请求,而是返回错误导致错误小部件显示。寻求解决Dio在刷新令牌后正确重试网络调用的方法。
摘要由CSDN通过智能技术生成

我正在尝试在Dio中使用Interceptor和Dio,我必须处理令牌过期。以下是我的代码

Future getApiClient() async {

token = await storage.read(key: USER_TOKEN);

_dio.interceptors.clear();

_dio.interceptors

.add(InterceptorsWrapper(onRequest: (RequestOptions options) {

// Do something before request is sent

options.headers["Authorization"] = "Bearer " + token;

return options;

},onResponse:(Response response) {

// Do something with response data

return response; // continue

}, onError: (DioError error) async {

// Do something with response error

if (error.response?.statusCode == 403) {

// update token and repeat

// Lock to block the incoming request until the token updated

_dio.interceptors.requestLock.lock();

_dio.interceptors.responseLock.lock();

RequestOptions options = error.response.request;

FirebaseUser user = await FirebaseAuth.instance.currentUser();

token = await user.getIdToken(refresh: true);

await writeAuthKey(token);

options.headers["Authorization"] = "Bearer " + token;

_dio.interceptors.requestLock.unlock();

_dio.interceptors.responseLock.unlock();

_dio.request(options.path, options: options);

} else {

return error;

}

}));

_dio.options.baseUrl = baseUrl;

return _dio;

}

问题是Dio不再使用新令牌重复网络调用,而是将错误对象返回到调用方法,后者又呈现了错误的小部件,有关如何使用dio处理令牌刷新的任何线索?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值