recoverSession method
Recover session from stringified Session.
Implementation
Future<AuthResponse> recoverSession(String jsonStr) async {
try {
final session = Session.fromJson(json.decode(jsonStr));
if (session == null) {
_log.warning("Can't recover session from string, session is null");
await signOut();
throw notifyException(
AuthException('Current session is missing data.'),
);
}
if (session.isExpired) {
_log.fine('Session from recovery is expired');
final refreshToken = session.refreshToken;
if (_autoRefreshToken && refreshToken != null) {
return await _callRefreshToken(refreshToken);
} else {
await signOut();
throw notifyException(AuthException('Session expired.'));
}
} else {
final shouldEmitEvent = _currentSession == null ||
_currentSession!.user.id != session.user.id;
_saveSession(session);
if (shouldEmitEvent) {
notifyAllSubscribers(AuthChangeEvent.tokenRefreshed);
}
return AuthResponse(session: session);
}
} catch (error, stackTrace) {
notifyException(error, stackTrace);
rethrow;
}
}