Redirect to onboarding on invalid token
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import 'package:linkdy/providers/server_instances_provider.dart';
|
||||
import 'package:linkdy/providers/dio_interceptor.provider.dart';
|
||||
import 'package:linkdy/services/api_client.dart';
|
||||
import 'package:linkdy/utils/api_base_url.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'api_client_provider.g.dart';
|
||||
|
||||
@@ -13,16 +15,17 @@ class ApiClient extends _$ApiClient {
|
||||
final savedInstances = ref.watch(serverInstancesProvider);
|
||||
if (savedInstances.isNotEmpty) {
|
||||
final instance = savedInstances[0];
|
||||
final dio = Dio(
|
||||
BaseOptions(
|
||||
baseUrl: apiBaseUrl(instance),
|
||||
headers: {
|
||||
"Authorization": "Token ${instance.token}",
|
||||
},
|
||||
),
|
||||
)..interceptors.add(ref.watch(dioInterceptorProvider));
|
||||
return ApiClientService(
|
||||
serverInstance: instance,
|
||||
dioInstance: Dio(
|
||||
BaseOptions(
|
||||
baseUrl: apiBaseUrl(instance),
|
||||
headers: {
|
||||
"Authorization": "Token ${instance.token}",
|
||||
},
|
||||
),
|
||||
),
|
||||
dioInstance: dio,
|
||||
);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'api_client_provider.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$apiClientHash() => r'd26f8058edfc47acd2e01f2a9bcbf64102b51212';
|
||||
String _$apiClientHash() => r'81e911e24bda3baf158a7d583271c4467821b11f';
|
||||
|
||||
/// See also [ApiClient].
|
||||
@ProviderFor(ApiClient)
|
||||
|
||||
31
lib/providers/dio_interceptor.provider.dart
Normal file
31
lib/providers/dio_interceptor.provider.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
import 'package:linkdy/i18n/strings.g.dart';
|
||||
import 'package:linkdy/providers/server_instances_provider.dart';
|
||||
import 'package:linkdy/router/routes.dart';
|
||||
import 'package:linkdy/utils/snackbar.dart';
|
||||
import 'package:linkdy/router/paths.dart';
|
||||
import 'package:linkdy/providers/api_client_provider.dart';
|
||||
|
||||
part 'dio_interceptor.provider.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
InterceptorsWrapper dioInterceptor(DioInterceptorRef ref) {
|
||||
return InterceptorsWrapper(
|
||||
onError: (error, handler) async {
|
||||
if (error.response?.statusCode == 401) {
|
||||
while (GoRouter.of(rootNavigatorKey.currentContext!).canPop() == true) {
|
||||
GoRouter.of(rootNavigatorKey.currentContext!).pop();
|
||||
}
|
||||
GoRouter.of(rootNavigatorKey.currentContext!).pushReplacement(RoutesPaths.onboarding);
|
||||
ref.read(apiClientProvider.notifier).disconnectApiClient();
|
||||
ref.read(serverInstancesProvider.notifier).removeServerInstances();
|
||||
showSnacbkar(label: t.generic.authTokenNotValid, color: Colors.red);
|
||||
}
|
||||
handler.next(error);
|
||||
},
|
||||
);
|
||||
}
|
||||
25
lib/providers/dio_interceptor.provider.g.dart
Normal file
25
lib/providers/dio_interceptor.provider.g.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'dio_interceptor.provider.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$dioInterceptorHash() => r'449d19df5bf143a7e0f92249d99b4d223b2468f3';
|
||||
|
||||
/// See also [dioInterceptor].
|
||||
@ProviderFor(dioInterceptor)
|
||||
final dioInterceptorProvider = Provider<InterceptorsWrapper>.internal(
|
||||
dioInterceptor,
|
||||
name: r'dioInterceptorProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$dioInterceptorHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef DioInterceptorRef = ProviderRef<InterceptorsWrapper>;
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
Reference in New Issue
Block a user