findAuthCredentialForUser function

Future<AuthPasswordCredential?> findAuthCredentialForUser(
  1. AuthStore store,
  2. String userId
)

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));
}