getSession method
This is used to get a session, either from the session object or from the local storage, or by using a refresh token
Implementation
Future<CognitoUserSession?> getSession() async {
if (username == null) {
throw Exception('Username is null. Cannot retrieve a new session');
}
if (_signInUserSession != null && _signInUserSession!.isValid()) {
return _signInUserSession;
}
final idTokenKey = '$keyPrefix.idToken';
final accessTokenKey = '$keyPrefix.accessToken';
final refreshTokenKey = '$keyPrefix.refreshToken';
final clockDriftKey = '$keyPrefix.clockDrift';
if (await storage.getItem(idTokenKey) != null) {
final idToken = CognitoIdToken(await storage.getItem(idTokenKey));
final accessToken =
CognitoAccessToken(await storage.getItem(accessTokenKey));
final refreshToken =
CognitoRefreshToken(await storage.getItem(refreshTokenKey));
final clockDrift = int.parse(await storage.getItem(clockDriftKey));
final cachedSession = CognitoUserSession(
idToken,
accessToken,
refreshToken: refreshToken,
clockDrift: clockDrift,
);
if (cachedSession.isValid()) {
_signInUserSession = cachedSession;
return _signInUserSession;
}
if (refreshToken.getToken() == null) {
throw Exception('Cannot retrieve a new session. Please authenticate.');
}
return refreshSession(refreshToken);
}
throw Exception(
'Local storage is missing an ID Token, Please authenticate');
}