login method

Future<AuthSuccess> login(
  1. Session session, {
  2. String? token,
  3. Transaction? transaction,
})

Creates a new anonymous account and returns its session.

Invokes the AnonymousIdp.beforeAnonymousAccount callback if configured, which may prevent account creation if the endpoint is protected.

Implementation

Future<AuthSuccess> login(
  final Session session, {
  final String? token,
  final Transaction? transaction,
}) async {
  return DatabaseUtil.runInTransactionOrSavepoint(
    session.db,
    transaction,
    (final transaction) async {
      if (config.onBeforeAnonymousAccountCreated != null) {
        try {
          await config.onBeforeAnonymousAccountCreated!(
            session,
            token: token,
            transaction: transaction,
          );
        } on Exception catch (e, st) {
          session.log(
            'Exception in onBeforeAnonymousAccountCreated',
            exception: e,
            stackTrace: st,
          );
          throw AnonymousAccountBlockedException(
            reason: AnonymousAccountBlockedExceptionReason.denied,
          );
        }
      }

      final result = await utils.createAnonymousAccount(
        session,
        transaction: transaction,
      );
      await _userProfiles.createUserProfile(
        session,
        result.authUserId,
        UserProfileData(),
        transaction: transaction,
      );

      return _tokenManager.issueToken(
        session,
        authUserId: result.authUserId,
        method: method,
        scopes: result.scopes,
        transaction: transaction,
      );
    },
  );
}