Fix authentication interface and service methods for logout and login.

This commit is contained in:
2025-05-19 17:00:01 +02:00
parent 077956b8ba
commit c2cfb46d82
2 changed files with 15 additions and 8 deletions
@@ -36,7 +36,11 @@ abstract class ArcaneAuthInterface {
/// This method terminates the current session and removes any stored tokens.
/// Returns a `Result` that either contains a `void` on success or an error
/// message.
Future<Result<void, String>> logout();
/// Upon a successful logout, the `onLoggedOut` method will be called if it
/// has been provided.
Future<Result<void, String>> logout({
Future<void> Function()? onLoggedOut,
});
/// Logs the user in using an optional, generic `T` type of input.
/// This login method is a generic method that can be used to login with any
@@ -44,6 +48,8 @@ abstract class ArcaneAuthInterface {
/// and password. Any type of input can be passed in, and it will be handled
/// by the implementation of the method wihin the specific authentication
/// service.
/// Upon a successful login, the `onLoggedIn` method will be called if it
/// has been provided.
///
/// Example:
/// ```dart
@@ -50,13 +50,13 @@ class ArcaneAuthenticationService extends ArcaneService {
/// Returns a JWT access token if the registered `ArcaneAuthInterface`
/// provides one. This token is often used in the headers of HTTP requests
/// to the backend API.
Future<String?> get accessToken =>
authInterface?.accessToken ?? Future.value("");
Future<String?> get accessToken async =>
await authInterface?.accessToken ?? Future.value("");
/// Returns a JWT refresh token if the registered `ArcaneAuthInterface`
/// provides one.
Future<String?> get refreshToken =>
authInterface?.refreshToken ?? Future.value("");
Future<String?> get refreshToken async =>
await authInterface?.refreshToken ?? Future.value("");
AuthenticationStatus? _previousModeWhenSettingDebug;
@@ -169,11 +169,12 @@ class ArcaneAuthenticationService extends ArcaneService {
if (!isAuthenticated) Result.error("User is not authenticated.");
final Result<void, String> loggedOut = await authInterface!.logout();
final Result<void, String> loggedOut = await authInterface!.logout(
onLoggedOut: onLoggedOut,
);
if (loggedOut.isSuccess) {
setUnauthenticated();
if (onLoggedOut != null) await onLoggedOut();
}
_previousModeWhenSettingDebug = null;
@@ -192,11 +193,11 @@ class ArcaneAuthenticationService extends ArcaneService {
final Result<void, String> result = await authInterface!.login(
input: input,
onLoggedIn: onLoggedIn,
);
if (result.isSuccess) {
setAuthenticated();
if (onLoggedIn != null) await onLoggedIn();
}
return result;