findAuthCredentialForUser function
Resolves the password credential owned by userId.
Username-based accounts require an explicit user lookup capability because their credential identifier cannot be derived from the public user record. Email lookup remains as a compatibility fallback for older adapters.
Implementation
Future<AuthPasswordCredential?> findAuthCredentialForUser(
AuthStore store,
String userId,
) async {
final normalizedUserId = userId.trim();
if (normalizedUserId.isEmpty) return null;
final credentialStore = store.credentials;
if (credentialStore is AuthCredentialUserLookupStore) {
final lookup = credentialStore as AuthCredentialUserLookupStore;
final credential = await Future.sync(
() => lookup.findForUser(normalizedUserId),
);
if (credential != null) return credential;
}
if (store is AuthAdminStoreCapabilities) {
final capabilities = store as AuthAdminStoreCapabilities;
final credential = await Future.sync(
() => capabilities.findCredentialForUser(normalizedUserId),
);
if (credential != null) return credential;
}
final user = await Future.sync(() => store.users.findById(normalizedUserId));
final email = user?.email;
if (email == null || email.isEmpty) return null;
return Future.sync(() => credentialStore.findByIdentifier(email));
}