-
Notifications
You must be signed in to change notification settings - Fork 280
Open
Description
I am trying to handle the token error when it has expired and perform refreshToken. But my provider that receives network responses from the grpc client receives the response before the token is refreshed. I can see in devtools that the token has been refreshed and the request has been sent
class RefreshTokenInterceptors extends ClientInterceptor {
final Ref ref;
RefreshTokenInterceptors({required this.ref});
@override
ResponseFuture<R> interceptUnary<Q, R>(
ClientMethod<Q, R> method,
Q request,
CallOptions options,
invoker,
) {
return super.interceptUnary(method, request, options, invoker)
// ignore: discarded_futures
..catchError((e) async {
final error = e as GrpcError;
final currentToken =
ref.read(storageProvider).getString(StorageKeys.accessToken);
if (currentToken.isNotEmpty) {
if (error.code == 7) {
final res = await ref.read(authProvider.notifier).refreshToken();
return res.fold(
(l) => null,
(r) async {
if (r.accessToken.isNotEmpty) {
return invoker(
method,
request,
CallOptions(
providers: [
(Map<String, String> metadata, String uri) async {
try {
metadata["authorization"] = r.accessToken;
} catch (e) {
log("interceptor error ${e.toString()}");
}
}
],
),
);
}
},
);
}
}
throw e;
});
}
}
bivens-dev and armanafat
Metadata
Metadata
Assignees
Labels
No labels