Platform & Access · Change own password
Authenticated self-service password change requiring the current password plus a new one and its confirmation.
| Area | Platform & Access |
| Routes | configuration.password · configuration.password.index |
| Centre modules | always available |
| Staff levels | any authenticated staff level |
| Models | staff-member |
| UI label | menu.navbar.configuration.password |
| Coverage | 2 use cases · 1 happy · 3 failure |
How it works
Extends the generic routes/form.js save pipeline, so model validation runs before save() and the route redirects to returnRoute on success. It overrides the super call with a .catch() so an API rejection keeps the user on the form instead of transitioning away. The menu entry excludes content_creator, calibrator and external, so those levels have no self-service password change from the menu.
Use cases
Why someone opens this (2)
- Routine credential rotation.
- A user who suspects their password was shared changing it immediately.
Path map
flowchart LR F(["Change own password"]):::feat F --> H1["Password rotated"]:::ok F -.-> X1["Current password missing or wrong"]:::bad F -.-> X2["New password too weak"]:::bad F -.-> X3["Confirmation mismatch"]:::bad classDef feat fill:#4a5c8a,stroke:#4a5c8a,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Password rotated
- User opens Configuration → Change password.
- Enters current password, new password and confirmation.
- Model validations pass (
passOldpresent,passmatches the format rule,passConfirmationmatchespass).informative-message.change-password.success.messageis shown and the user is returned to the previous route.
Failure paths
Current password missing or wrong
Cause —
passOldblank (local) or rejected by the API.What happens —
current-pass-requiredlocally; API errors are caught by the overridden_super(...).catch()so the form is kept open.
New password too weak
Cause — Fails the 10-character mixed-case + digit format rule.
What happens —
pass-formatinline error, no request sent.
Confirmation mismatch
Cause —
passConfirmation≠pass.What happens —
match-passinline error.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Password rotated
- ⛔ Current password missing or wrong
- ⛔ New password too weak
- ⛔ Confirmation mismatch
Implementation
Translation keys (5)
Key English menu.navbar.configuration.passwordChange password informative-message.change-password.success.messageYour password has been changed. You will be redirected to the login panel current-pass-requiredCurrent pass is required pass-formatUse 10 or more letters, with at least 1 number, 1 capital letter and 1 lower letter match-passThe password fields do not match
Related
- Same area — Staff login · Password reset request · Password update from reset link · Idle auto-logout · Centre switching & multi-centre scoping · Server-incident banner · Desktop (home dashboard) · Runtime environment & white-label boot · Back-office interface language · In-app help & support chat (Froged)
- Shares data with — Intranet communications (threads, confirmations, authorisations) · Staff member list, deletion & restore · Staff member editor (levels, scope, API token) · Role & module permission layer · Customer action log (dormant)
Generated from doc/feature-inventory.json · id platform-change-own-password · commit 276788ca6