1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-25 10:43:13 +02:00

fix(mobile) - Allow sign out if server is down, or device is offline (#3275)

* WIP: Allow app sign out when server cannot be reached

* WIP: import logging lib

* WIP: move log out up
This commit is contained in:
Dhrumil Shah 2023-07-15 21:52:41 -04:00 committed by GitHub
parent 7595d01956
commit 9012cf6946
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 21 deletions

View File

@ -33,14 +33,12 @@ class ProfileDrawer extends HookConsumerWidget {
?.copyWith(fontWeight: FontWeight.bold), ?.copyWith(fontWeight: FontWeight.bold),
).tr(), ).tr(),
onTap: () async { onTap: () async {
bool res = await ref.watch(authenticationProvider.notifier).logout(); await ref.watch(authenticationProvider.notifier).logout();
if (res) { ref.watch(backupProvider.notifier).cancelBackup();
ref.watch(backupProvider.notifier).cancelBackup(); ref.watch(assetProvider.notifier).clearAllAsset();
ref.watch(assetProvider.notifier).clearAllAsset(); ref.watch(websocketProvider.notifier).disconnect();
ref.watch(websocketProvider.notifier).disconnect(); AutoRouter.of(context).replace(const LoginRoute());
AutoRouter.of(context).replace(const LoginRoute());
}
}, },
); );
} }

View File

@ -14,6 +14,7 @@ import 'package:immich_mobile/shared/services/api.service.dart';
import 'package:immich_mobile/utils/db.dart'; import 'package:immich_mobile/utils/db.dart';
import 'package:immich_mobile/utils/hash.dart'; import 'package:immich_mobile/utils/hash.dart';
import 'package:isar/isar.dart'; import 'package:isar/isar.dart';
import 'package:logging/logging.dart';
import 'package:openapi/api.dart'; import 'package:openapi/api.dart';
class AuthenticationNotifier extends StateNotifier<AuthenticationState> { class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
@ -92,21 +93,29 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
} }
} }
Future<bool> logout() async { Future<void> logout() async {
var log = Logger('AuthenticationNotifier');
try { try {
String? userEmail = Store.tryGet(StoreKey.currentUser)?.email;
_apiService.authenticationApi
.logout()
.then((_) => log.info("Logout was successfull for $userEmail"))
.onError(
(error, stackTrace) =>
log.severe("Error logging out $userEmail", error, stackTrace),
);
await Future.wait([ await Future.wait([
_apiService.authenticationApi.logout(),
clearAssetsAndAlbums(_db), clearAssetsAndAlbums(_db),
Store.delete(StoreKey.currentUser), Store.delete(StoreKey.currentUser),
Store.delete(StoreKey.accessToken), Store.delete(StoreKey.accessToken),
]); ]);
state = state.copyWith(isAuthenticated: false); state = state.copyWith(isAuthenticated: false);
return true;
} catch (e) { } catch (e) {
debugPrint("Error logging out $e"); log.severe("Error logging out $e");
return false;
} }
} }

View File

@ -75,18 +75,15 @@ class ChangePasswordForm extends HookConsumerWidget {
.changePassword(passwordController.value.text); .changePassword(passwordController.value.text);
if (isSuccess) { if (isSuccess) {
bool res = await ref await ref
.read(authenticationProvider.notifier) .read(authenticationProvider.notifier)
.logout(); .logout();
if (res) { ref.read(backupProvider.notifier).cancelBackup();
ref.read(backupProvider.notifier).cancelBackup(); ref.read(assetProvider.notifier).clearAllAsset();
ref.read(assetProvider.notifier).clearAllAsset(); ref.read(websocketProvider.notifier).disconnect();
ref.read(websocketProvider.notifier).disconnect();
AutoRouter.of(context) AutoRouter.of(context).replace(const LoginRoute());
.replace(const LoginRoute());
}
} }
} }
}, },