IdentityService constructor

IdentityService(
  1. IdentityProvider provider
)

Implementation

IdentityService(
  IdentityProvider provider,
) : super(
        initialState: const IdentityState(),
        provider: provider,
      ) {
  // Hydrate the saved state
  hydrate();
  // Validate the current session and if it
  // is valid then check if hydrated session
  // and auth provider session are in sync
  provider.validateSession().then(
    (isValid) {
      if (isValid) {
        provider.getLoggedInUsername().then(
          (username) {
            if (!state.isLoggedIn ||
                (state.isLoggedIn && username != state.user.username)) {
              _logger.info(
                'Session state username does not match provider\'s '
                'logged in username "$username". Signing out user '
                'and clearing state.',
              );
              provider.signOut();
            }
          },
        );
      } else if (state.isLoggedIn) {
        _logger.info(
          'Session state is logged in but the provider\'s '
          'session was not valid. Clearing state',
        );
        emit(const IdentityState());
      }
    },
  );

  // Listen to events from the provider
  // and update the state accordingly
  _providerEventSubscription = provider.providerEventStream.listen((event) {
    _handleEventsFromProvider(event);
  });
}