authorizeCredentialsRegistration function

Future<AuthUser?> authorizeCredentialsRegistration({
  1. required AuthStore store,
  2. required PasswordHasher passwordHasher,
  3. required CredentialsProvider provider,
  4. required AuthContext context,
  5. required AuthCredentials credentials,
  6. PasswordPolicy passwordPolicy = const PasswordPolicy(),
})

Resolves credential registration via provider callback or password records.

Implementation

Future<AuthUser?> authorizeCredentialsRegistration({
  required AuthStore store,
  required PasswordHasher passwordHasher,
  required CredentialsProvider provider,
  required AuthContext context,
  required AuthCredentials credentials,
  PasswordPolicy passwordPolicy = const PasswordPolicy(),
}) async {
  if (provider.register != null) {
    final user = await Future.sync(
      () => provider.register!(context, provider, credentials),
    );
    return _usableAuthUser(user);
  }
  final identifier = _credentialIdentifier(credentials);
  final password = credentials.password;
  if (identifier == null ||
      password == null ||
      passwordPolicy.validateRegistration(password) != null) {
    return null;
  }
  final now = DateTime.now().toUtc();
  final normalizedEmail = credentials.email == null
      ? null
      : normalizeAuthEmail(credentials.email!);
  final user = AuthUser(
    id: secureRandomToken(length: 16),
    email: normalizedEmail == null || normalizedEmail.isEmpty
        ? null
        : normalizedEmail,
    name: credentials.username?.trim() ?? normalizedEmail,
  );
  final credential = AuthPasswordCredential(
    id: secureRandomToken(length: 16),
    userId: user.id,
    identifier: identifier,
    passwordHash: passwordHasher.hash(password),
    createdAt: now,
    updatedAt: now,
  );
  return Future.sync(() => store.credentials.register(user, credential));
}