Sign in
or
Don't have an account? Sign up
Uses sub-flows:
Screen Flow (from uc-idp-02-login-learner.yaml):
๐ Spec notes โ UC-IDP.02 / SCR-IDP.22 (fields, actions, requirements)
- Screen: SCR-IDP.22 โ Login (Password + Google SSO)
- Use case: UC-IDP.02 โ Login โ Learner
Main login screen for learners โ supports Password and Google SSO.
Two inline error states:
E1 โ invalid credential (error_message visible when login_failed && !lockout_active);
E2 โ locked after 5 failed attempts (lockout_countdown visible, submit disabled).
On success โ SCR-LMS.01 (Browse Course Catalog).
"Forgot Password?" โ UC-IDP.22.
Learner Portal (web) note: AF-1A / AF-1A.1A (OS quick login, SUC-IDP-05) is a mobile-app-only
capability per the requirements model's Sub-Use-Case invocation table โ not rendered on this web prototype.
See the Learner Mobile prototype for that scenario.
login_identifier"Email / Mobile Number" โ text ยทAuthIdentity.provider_uidยท required ยท validation: one_of[email, phone], max_length:255 ยท always visiblepassword"Password" โ password ยท null (backend checks againstAuthIdentity.credentialhash) ยท required ยท validation: min_length:8 ยท always visibleerror_message"Error message" โ text read-only ยท default "Invalid email or password" ยท visible whenlogin_failed == true && lockout_active == falseโ prototype: scenario=AF-3A / AF-3B (same message renders for both, by design โ prevents account enumeration)lockout_countdown"Lockout countdown" โ computed fromPasswordAttempt.lock_untilยท visible whenlockout_active == trueโ prototype: scenario=AF-3C
submit"Sign in" โ enabled whenrequired_fields_valid && lockout_active == falseยท triggers UC-IDP.02-M-2 ยท disabled in lockout / account-suspended states (AF-3C, AF-3D)google_sso"Sign in with Google" โ enabled always ยท triggers UC-IDP.02-A-2A-1 โ SUC-IDP-03forgot_password"Forgot Password?" โ enabled always ยท triggers UC-IDP.02-A-3B-2 โ UC-IDP.22sign_up"Sign up" โ enabled always ยท triggers UC-IDP.01-M-1
- Error message must always read "Invalid email or password" regardless of whether identifier or password is wrong โ prevents account enumeration. This also covers AF-3A (account not found) โ same generic message is shown, not a distinct "no account found" message. [refs: none]
- During lockout (
lockout_active == true): submit button disabled + real-time 15-minute countdown. [refs: SS-IDP.13] - Keyboard focus order: login_identifier โ password โ submit. Tab/Shift+Tab on both web and mobile browsers. [refs: NFR-09]
SCR-IDP.09 (Account Not Found) and SCR-IDP.10 (Account Suspended) are marked status: deprecated
and used_in_ucs: [] in screens.yaml โ "designed as a shared dialog but never wired into any UC;
each login/forgot-password UC inlines its own message instead." AF-3A and AF-3D are therefore rendered as
inline alerts on this screen rather than as separate dialog modals.