← Back to Index

Login (ALPA Members / Non-Members) — Data-Gap Analysis

Scoping of the Log In screen — the app's unauthenticated entry point (member-number / ALPA-email credential form). Documentation only; no presentation work. An outlier screen: it sits outside the authenticated screen set and is not modeled in the screen-mapping screen array.

Sources: codebase — LoginPage.razor (/login), LoginPageViewModel, RestService.AuthenticateUserViaJWTAsync, AuthJWTRequest / AuthJWTResult, IAuthentication, ITokenStore, SettingsService.RememberMe. Figma file R6hPjBdjSIn6946qTJasUC (Log In screen — node id to confirm). Branch docs/AB1821-login-data-gap. Updated: 2026-07-06 17:22 ET · Audited: 2026-06-30 16:12 ET.

Headline — data-complete. The credential form maps fully to the JWT auth path: AuthenticateUserViaJWTAsync takes AuthJWTRequest { AlpaId, Domain, Password } and returns AuthJWTResult { access_token, expires_in, features[], user_info }. Forgot-password and Create-account are external web links; Help is a mailto (apphelp@alpa.org). No backend data gaps. Open items are presentation / interactivity in the Blazor scaffold (see §4) plus three confirms (Domain derivation · features[] semantics · UserInfo.Rank dependency).

1 · Screens & controls

2 · Data-source mapping

ElementDataSource (exists)Status
Username fieldmember number or ALPA emailAuthJWTRequest.AlpaIdmapped
Password fieldpassword (+ show/hide)AuthJWTRequest.Password · show/hide via ToggleShowPasswordCommand (icn_login_eye)mapped
Tenant/domainauth domain (member vs non-member)AuthJWTRequest.Domain (derived from RestService.BaseDomain)mapped confirm
ALPA Members Log In (primary)authenticateLogInCommandLogInAsyncAuthenticateUserViaJWTAsyncAuthJWTResult { access_token, expires_in, features[], user_info }mapped
Member / Non-Member toggleuser typeMemberCommand / NonMemberCommand (IsMember, UserTypeSelectorVisible) — same endpoint; email vs member-number validationmapped
Remember Mepersist session preferenceSettingsService.RememberMeAppProperties.RememberMe (local pref)local
Forgot Passwordpassword resetweb: member → {BaseUrl}/pages/password-help; non-member → https://appsignup.{BaseDomain}/Home/ctl/SendPassword (ForgotPasswordCommand)web-link
Forgot Member Numbermember-number lookup/recoveryNot yet wired to a command — no member-number-lookup endpoint identified in the mobile REST client. Gap-audited 2026-07-06 (Figma node 5251:15088, "button link" — a plain FRAME, not a published component; resolved not-catalogued as one-off content, D49). Likely mirrors Forgot Password's web-link pattern; not confirmed.confirm
Create ALPA Accountregistrationweb: https://appsignup.{BaseDomain} (RegisterCommand)web-link
"Click here for more help"support contactmailto apphelp@alpa.org (EmailSupportCommand)email
Authenticated username · rank · profileAuthJWTResult.user_infoUserInfo (stored via ITokenStore.UserInfoJson)mapped Rank in-progress
Feature flagslogin-time capability gatingAuthJWTResult.features (List<string>)mapped confirm
Error statesbad credentials · empty input · network"BadCredentials"Constants.ExceptionMessageBadUserNamePassword (401 default); empty-username DisplayAlert; RestService error mappingmapped

3 · Confirm items

#ItemQuestion
1Domain derivationHow is AuthJWTRequest.Domain set for member vs non-member sign-in? It is derived from RestService.BaseDomain — confirm the non-member case resolves to the same tenant the JWT endpoint expects.
2features[] semanticsWhich feature flags does AuthJWTResult.features return at login, and which login-time / onboarding UI do they gate? Confirm the list and meaning (and the non-member subset).
3UserInfo.RankDependency: Rank rides on user_info but is one of the three in-progress backend changes (AB#1821 Change 1 — Rank, blocking for Home's Pilot Card). No login-screen change, but the post-login experience depends on it. See home-screen-data-gap.html.
4Non-member scopeWhat can a non-member session access once authenticated (which features / screens)? Confirm the non-member capability scope so the post-login surface degrades correctly.
5Forgot Member Number destinationAdded 2026-07-06 (gap audit, D49). No backend endpoint identified for member-number lookup/recovery — confirm whether this is a web-link (mirroring Forgot Password) or a new mobile-side flow.

4 · Presentation / interactivity backlog (scaffold)

Backend mapping is complete; the open work is wiring the Blazor scaffold (/login, currently static inputs) to the existing view-model commands and adopting the canonical form atoms:

5 · Summary

Referenced from screen-mapping.html. UI Refresh Epic AB#1821.