createAnonymousAccount method

Future<AnonymousIdpAccountCreationResult> createAnonymousAccount(
  1. Session session, {
  2. Transaction? transaction,
})

Creates a new anonymous account.

The optional RateLimit is enforced here if non-null.

Implementation

Future<AnonymousIdpAccountCreationResult> createAnonymousAccount(
  final Session session, {
  final Transaction? transaction,
}) async {
  if (_rateLimitUtil != null &&
      !await _rateLimitUtil.tryRecordAttempt(
        session,
        key: session.remoteIpAddress.toString(),
      )) {
    throw AnonymousAccountBlockedException(
      reason: AnonymousAccountBlockedExceptionReason.tooManyAttempts,
    );
  }

  final newUser = await _authUsers.create(
    session,
    transaction: transaction,
  );

  await AnonymousAccount.db.insertRow(
    session,
    AnonymousAccount(
      authUserId: newUser.id,
    ),
    transaction: transaction,
  );

  await config.onAfterAnonymousAccountCreated?.call(
    session,
    authUserId: newUser.id,
    transaction: transaction,
  );

  return AnonymousIdpAccountCreationResult._(
    authUserId: newUser.id,
    scopes: newUser.scopes,
  );
}