mirror of
https://github.com/immich-app/immich.git
synced 2024-11-15 09:59:00 -07:00
fix(mobile): Stop sending app to login page for unrelated auth errors (#7383)
Now we only validate access token when we have one in the store and only send you to the login page when the response from the server is a 401 linter Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
parent
4272b496ff
commit
d799bf7910
@ -1,8 +1,8 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:immich_mobile/routing/router.dart';
|
import 'package:immich_mobile/routing/router.dart';
|
||||||
|
import 'package:immich_mobile/shared/models/store.dart';
|
||||||
import 'package:immich_mobile/shared/services/api.service.dart';
|
import 'package:immich_mobile/shared/services/api.service.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:openapi/api.dart';
|
import 'package:openapi/api.dart';
|
||||||
@ -16,28 +16,31 @@ class AuthGuard extends AutoRouteGuard {
|
|||||||
resolver.next(true);
|
resolver.next(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var res = await _apiService.authenticationApi.validateAccessToken();
|
// Look in the store for an access token
|
||||||
|
Store.get(StoreKey.accessToken);
|
||||||
|
|
||||||
|
// Validate the access token with the server
|
||||||
|
final res = await _apiService.authenticationApi.validateAccessToken();
|
||||||
if (res == null || res.authStatus != true) {
|
if (res == null || res.authStatus != true) {
|
||||||
// If the access token is invalid, take user back to login
|
// If the access token is invalid, take user back to login
|
||||||
_log.fine("User token is invalid. Redirecting to login");
|
_log.fine('User token is invalid. Redirecting to login');
|
||||||
router.replaceAll([const LoginRoute()]);
|
router.replaceAll([const LoginRoute()]);
|
||||||
}
|
}
|
||||||
|
} on StoreKeyNotFoundException catch (_) {
|
||||||
|
// If there is no access token, take us to the login page
|
||||||
|
_log.warning('No access token in the store.');
|
||||||
|
router.replaceAll([const LoginRoute()]);
|
||||||
|
return;
|
||||||
} on ApiException catch (e) {
|
} on ApiException catch (e) {
|
||||||
if (e.code == HttpStatus.badRequest &&
|
// On an unauthorized request, take us to the login page
|
||||||
e.innerException is SocketException) {
|
if (e.code == HttpStatus.unauthorized) {
|
||||||
// offline?
|
_log.warning("Unauthorized access token.");
|
||||||
_log.fine(
|
|
||||||
"Unable to validate user token. User may be offline and offline browsing is allowed.",
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
debugPrint("Error [onNavigation] ${e.toString()}");
|
|
||||||
router.replaceAll([const LoginRoute()]);
|
router.replaceAll([const LoginRoute()]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
debugPrint("Error [onNavigation] ${e.toString()}");
|
// Otherwise, this is not fatal, but we still log the warning
|
||||||
router.replaceAll([const LoginRoute()]);
|
_log.warning('Error validating access token from server: $e');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user