base_auth_interceptor
A reusable auth interceptor base based on net_client package.
Installation
From pub.dev
Add this to your pubspec.yaml
dependencies:
base_auth_interceptor: ^1.0.0
Or, From Git repo
dependencies:
base_auth_interceptor:
git:
url: https://github.com/Ragibn5/dart-flutter-packages.git
path: base_auth_interceptor
ref: base_auth_interceptor-1.0.0
🚀 Get started
AuthDataProvider
Supplies current and refreshed auth data.
/// Demo implementation
class AuthDataProviderImpl implements AuthDataProvider<String> {
@override
Future<String?> getAuthData() async => 'my-token';
@override
Future<String?> requestAuthDataRefresh(String oldAuthData) async => null;
}
AuthRefreshPolicy
Decides when an auth error should trigger a refresh.
/// Demo implementation
class AuthRefreshPolicyImpl implements AuthRefreshPolicy<String> {
@override
bool didServerReportAuthError(RawResponse response) =>
response.statusCode == HttpStatus.unauthorized;
@override
bool shouldRefreshAuthData(RequestSpec request, String authData) => false;
}
AuthRequestTransformer
Adds auth data to requests.
/// Demo implementation
class AuthRequestTransformerImpl implements AuthRequestTransformer<String> {
@override
Future<RequestSpec> transformRequestWithAuthData(RequestSpec request,
String authData,) async =>
request.copyWith(
headers: {...request.headers, HttpHeaders.authorizationHeader: 'Bearer $authData'},
);
}
RequestRetrier
Replays a request with refreshed auth data.
/// Demo implementation
class RequestRetrierImpl implements RequestRetrier<String> {
@override
Future<ApiCallResult> retryRequest(RequestSpec request,
String refreshedAuthData,) async =>
Success(NetClientResponse(
isError: false,
statusCode: 200,
data: '',
headers: {},
requestSpec: request,
));
}
Compose
Compose the earlier dependencies to build the interceptor.
/// Demo implementation
class AppAuthInterceptor extends BaseAuthInterceptor<String> {
AppAuthInterceptor() : super(
AuthDataProviderImpl(),
AuthRefreshPolicyImpl(),
AuthRequestTransformerImpl(),
RequestRetrierImpl(),
);
}
Example
See the example for a complete demonstration.
Libraries
- base_auth_interceptor
- A reusable auth interceptor base based on
net_clientpackage.