Medium — weak passwords can be created during signup; the UX also doesn't tell users the complexity rules they expect (capital, lowercase, special character).
There is no enforcement of character complexity, so a password like longenough (all lowercase, no capital, no special character) is accepted as valid. Users are accustomed to being told a password must contain a capital letter, a lowercase letter, and a special character — none of which is currently required.
Note: the component already measures these criteria in getPasswordStrength() (lower/upper/digit/special), but that only drives the strength badge — it does not block submission.
Steps to reproduce
Open the "Join SpikerSoft" registration flow and go to the password step.
Enter longenough as the password (and confirm it).
Observe the form treats the password as valid (no complexity error).
Expected
The password must contain at least one uppercase letter, one lowercase letter, and one special character (in addition to the existing 8-character minimum). Unmet requirements should be shown as clear, localized validation errors and should block proceeding.
i18n: add registration.password.requirement* keys to assets/i18n/en.json / es.json.
## Severity
Medium — weak passwords can be created during signup; the UX also doesn't tell users the complexity rules they expect (capital, lowercase, special character).
## Area
Registration stepper — Step 3 (Password & Preferences), password field validation.
## Bug
The password form control only validates `required` and `minLength(8)`:
```ts
password: ["", [Validators.required, Validators.minLength(8)]],
```
There is no enforcement of character complexity, so a password like `longenough` (all lowercase, no capital, no special character) is accepted as valid. Users are accustomed to being told a password must contain a capital letter, a lowercase letter, and a special character — none of which is currently required.
Note: the component already *measures* these criteria in `getPasswordStrength()` (lower/upper/digit/special), but that only drives the strength badge — it does not block submission.
### Steps to reproduce
1. Open the "Join SpikerSoft" registration flow and go to the password step.
2. Enter `longenough` as the password (and confirm it).
3. Observe the form treats the password as valid (no complexity error).
### Expected
The password must contain at least one uppercase letter, one lowercase letter, and one special character (in addition to the existing 8-character minimum). Unmet requirements should be shown as clear, localized validation errors and should block proceeding.
## Pointers
- `spikersoft-angular/projects/spikersoft/src/app/_components/registration-stepper/registration-stepper.component.ts` — `passwordForm` password validators.
- `spikersoft-angular/projects/spikersoft/src/app/_components/registration-stepper/registration-stepper.component.html` — password `mat-error` messages.
- i18n: add `registration.password.requirement*` keys to `assets/i18n/en.json` / `es.json`.
spikerj
added the bug label 2026-06-25 16:25:23 +00:00
Resolved in spikersoft-angular PR #76 (merged to master). Added a password complexity validator requiring at least one uppercase letter, one lowercase letter, and one special character (length still handled by minLength), each surfaced as its own targeted, translated error message. Closing.
Resolved in spikersoft-angular PR #76 (merged to `master`). Added a password complexity validator requiring at least one uppercase letter, one lowercase letter, and one special character (length still handled by minLength), each surfaced as its own targeted, translated error message. Closing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Severity
Medium — weak passwords can be created during signup; the UX also doesn't tell users the complexity rules they expect (capital, lowercase, special character).
Area
Registration stepper — Step 3 (Password & Preferences), password field validation.
Bug
The password form control only validates
requiredandminLength(8):There is no enforcement of character complexity, so a password like
longenough(all lowercase, no capital, no special character) is accepted as valid. Users are accustomed to being told a password must contain a capital letter, a lowercase letter, and a special character — none of which is currently required.Note: the component already measures these criteria in
getPasswordStrength()(lower/upper/digit/special), but that only drives the strength badge — it does not block submission.Steps to reproduce
longenoughas the password (and confirm it).Expected
The password must contain at least one uppercase letter, one lowercase letter, and one special character (in addition to the existing 8-character minimum). Unmet requirements should be shown as clear, localized validation errors and should block proceeding.
Pointers
spikersoft-angular/projects/spikersoft/src/app/_components/registration-stepper/registration-stepper.component.ts—passwordFormpassword validators.spikersoft-angular/projects/spikersoft/src/app/_components/registration-stepper/registration-stepper.component.html— passwordmat-errormessages.registration.password.requirement*keys toassets/i18n/en.json/es.json.Resolved in spikersoft-angular PR #76 (merged to
master). Added a password complexity validator requiring at least one uppercase letter, one lowercase letter, and one special character (length still handled by minLength), each surfaced as its own targeted, translated error message. Closing.