Purpose
The Auth module manages Firebase Authentication users. It supports user listing, search, sorting, filtering, editing, bulk actions, import/export, transfers, JS scripting, provider visibility, custom claims, and Auth-to-Firestore linking.
User List and Search
The table/grid supports:
- paginated or streaming user list loading
- sorting by email, phone, UID, created time, and last login
- direct search by UID, email, and phone number
- local filtering by display name, claim value, provider, email verified, disabled/enabled status, creation range, and last sign-in range
- combined filters
- saved search presets
- real-time result updates
Output Modes
TABLE: user grid and primary admin workflowTREE: structured user/provider/claim viewJSON: raw user payload viewLOGS: Auth API, app, script, warning, and error logs
User Editing
Editable or visible fields:
- UID
- created timestamp, read-only
- last login timestamp, read-only
- password update flow
- hashed password import/update path where supported
- phone number
- display name
- photo URL
- disabled state
- email verified state
- custom claims/tokens
- provider linkage visibility
- linked provider list
User actions:
- create user, including custom UID
- edit attributes
- delete user
- disable or enable user
- mark or unmark email verified
- bulk disable
- bulk delete
Import, Export, Transfer
The module supports CSV/JSON import and export plus project-to-project transfer of users. Long-running imports, exports, deletes, disables, and transfers should run through Tasks.
JS Scripting
Auth JS scripts run locally with a local admin.auth()-style shim. Scripts can list users, update the local runtime snapshot, return structured objects for table/tree/json rendering, and emit logs. Use the Auth editor/import/transfer actions for Firebase mutations.
Auth to Firestore Linking
Auth/Firestore linking settings belong to the project selected in the sidebar. The Auth source dropdown selects project-wide Auth, a discovered/configured tenant, or a custom tenant ID when discovery is unavailable. The Firestore destination dropdown selects a linked Firestore instance and database as one endpoint; collection path is configured separately. This lets multiple tenants share one Firestore instance with separate collections or route to different Firestore instances without presenting a generic Firebase-project selector. UID mapping can use the Firestore document ID or a field value; shared collections can additionally filter by a tenant discriminator field/value pair. Auth user views can open linked Firestore user documents and show clear linked/unlinked states.
Current emulator evidence covers persisted mapping settings, selected-project sync, linked and missing Auth-side states, disabled navigation for a missing Firestore document, Auth-to-Firestore navigation, and focused Firestore-to-Auth reverse navigation. App-state tests cover selected-project route ownership, endpoint selector state, tenant-scoped route selection, shared-collection discriminator filtering, cross-project/database forward routing, and reverse restoration of the source Auth project and tenant. The endpoint-selector XCUITest passed on 2026-07-12 against external Firebase emulators and created one tenant route to a separate Firestore destination plus another route to a nested collection in the selected project's Firestore instance. Its retained result bundle is build/emulator-ui-artifacts/20260712-150333-auth-firestore-endpoint-selectors.xcresult.
Storage Photo Workflow
When Storage is configured, the Auth editor can write a selected Storage download URL back to photoURL. Current emulator proof covers the Storage URL handoff path: choosing an existing Storage object URL, writing it through the Auth editor, verifying the Auth emulator value, and confirming the Storage object remains browsable. Direct file-picker upload proof and approved live Storage proof remain open. Signed URL generation is handled separately by the Storage URL action.
Safety
- Read-only projects block Auth writes.
- Pro access gates Auth mutations, import/export, transfer, and scripts.
- Production writes and destructive actions require confirmation.
Source Anchors
Sources/FirestructApp/Features/Auth/UI/AuthModuleView.swiftSources/FirestructApp/Features/Auth/UI/AuthModuleView+Controls.swiftSources/FirestructApp/Features/Auth/UI/AuthModuleView+Editor.swiftSources/FirestructApp/Features/Auth/UI/AuthModuleView+Outputs.swiftSources/FirestructApp/Features/Auth/Services/Sources/FirestructCore/AuthListService.swiftSources/FirestructCore/AuthListService+Operations.swift