Zaslon s pozivom za kodo
Vzdrževalni zapis o do=wkidentity_stepup – zaslonu, skozi katerega gre vsak postopek z drugim dejavnikom na platformi. Beleži, zakaj je zgrajen tako, kot je, da nihče po nesreči ne bi obrnil nazaj štirih odločitev, ki so v njem.
Stanje
Sprejeto; v uporabi od 9. avgusta 2026.
Kontekst
[V uporabi od 2026-08-09] do=wkidentity_stepup je zaslon, skozi katerega gre vsak
postopek z drugim dejavnikom na platformi – lastni prav tako kot postopki šestih priključenih paketov.
Kar je na njem pravilno ali napačno pri upravljanju s tipkovnico, oznakah in sporočilih o napakah,
se pokaže povsod.
Mehanizem
Tipka Enter sproži preverjanje, ne pošiljanja
HTML ob pritisku tipke Enter v besedilnem polju sproži prvi gumb za oddajo v obrazcu, ne najbližjega. Dokler sta bila gumb Pošlji kodo po e-pošti in polje za kodo v istem obrazcu, je Enter zato zahteval novo kodo. Nova koda prepiše shranjeno zgoščeno vrednost, zato je koda, ki jo je uporabnik pravkar vtipkal, v istem trenutku postala neveljavna – zaslon pa je sporočal, da je koda poslana.
Zdaj sta to dva sosednja obrazca: gumb za pošiljanje ima svojega, tako da je edini gumb za oddajo
v obrazcu s kodo tisti, ki kodo preveri. S tem je bilo hkrati odgovorjeno na isto vprašanje pri
obveznosti ob prijavi (LoginGate).
Polje za kodo nariše en razred, ne štiri ročno napisane različice
CodeField::html($totp, $name, $opts) je edino mesto, ki nariše polje za enkratno kodo. Obe meji
izpelje iz nastavitve digits, namesto da bi bili zapisani kot številki:
| Lastnost | Vrednost | Zakaj je izpeljana |
|---|---|---|
pattern | digits števk, presledki so dovoljeni | Oba preverjevalnika presledke odstranita, preden števke preštejeta – polje mora sprejeti, kar sprejme preverjevalnik |
maxlength | dvakratnik digits | 123 456 ima sedem znakov; nespremenljivi maxlength=6 je iz tega naredil 123 45 |
required je treba vklopiti izrecno. Brskalnik obrazec preveri ob vsaki oddaji obrazca,
v katerem je polje. Na zaslonih, ki služijo samo vnosu kode, je to prav; v obrazcu profila bi
preverjanje stalo ob gumbu Shrani in bi shranjevanje onemogočilo. Gumb Prekliči ima poleg tega
še formnovalidate – sicer na praznem obrazcu ne bi naredil ničesar.
Napaka, stranska možnost, izhod
- Napačna koda je sporočena ob polju, z
role=„alert“in povezana prekaria-describedby– ne v splošni vrstici s sporočili, kjer bi stala ločeno od polja, na katero se nanaša. - Prekliči in pošiljanje kode sta vizualno umirjena. Prej so vsi trije gumbi za oddajo uporabljali isto barvo poudarka; Prekliči je bil tako opazen kot Potrdi.
- Če uporabnikov račun zahteve sploh ne more izpolniti, ker nima nastavljenega nobenega primernega dejavnika, zaslon ponudi pot nazaj (
stepup_back, Nazaj na začetno stran). Obveznost ob prijavi jo je imela od začetka, ta zaslon pa ne. code_format_hintnavede pričakovano število števk (6 števk. Presledki so dovoljeni.), da je pravilo zapisano in ga ni treba ugibati.
Odločitev pade pred izpisom
Do 9. avgusta 2026 je ta zaslon odločal v kljuki za izris (TPL_ACT_UNKNOWN), tam pa nobena
preusmeritev ne deluje: kljuka se sproži iz tpl_content(), torej iz strani, ki jo predloga že
izpisuje. Posledica je bila hujša od opozorila. Pravilna koda je bila sprejeta, zagotovilo
zabeleženo, vrnitev pa je tiho spodletela, tako da je uporabnik obstal na napol izrisani strani. Pri
obveznosti ob prijavi se je ista napaka pokazala tako, da prijavni piškotek ni bil nastavljen.
Zdaj se odloča v ACTION_ACT_PREPROCESS, ki se res izvede pred vsakim izpisom; kljuka za izris
nariše samo še tisto, kar je že odločeno. Enako je bilo preurejenih vseh šest priključenih paketov.
Posledice
- Gumb za pošiljanje in gumb za preverjanje ostaneta v ločenih obrazcih. Če spet pristaneta v enem, Enter zahteva novo kodo in s tem razveljavi pravkar vtipkano.
- Polje za kodo ostane
CodeField::html().patterninmaxlengthse izpeljeta iz nastavitvedigitsin se nikoli ne zapišeta kot številki – nespremenljivimaxlengthkodo s presledki odreže. - Odločitev ostane v
ACTION_ACT_PREPROCESS. V kljuki za izris preusmeritev ne deluje, napaka pa je tiha: pravilna koda je sprejeta, vrnitev kljub temu spodleti.