authorizeCredentialsRegistration function
Future<AuthUser?>
authorizeCredentialsRegistration({
- required AuthStore store,
- required PasswordHasher passwordHasher,
- required CredentialsProvider provider,
- required AuthContext context,
- required AuthCredentials credentials,
- 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));
}