Form OTP 6 chữ số với expire timer + max 3 attempts + Resend cooldown. Tổng hợp State Transition + Time-based + Cooldown. Demo: timer 30s, cooldown 15s.
Sau khi đăng ký hoặc đăng nhập, hệ thống gửi mã OTP 6 chữ số qua SMS/Email. Người dùng cần nhập mã trong thời gian quy định để xác thực. Bài này tổng hợp State Transition + Time-based + Cooldown.
123456***-***-7890| Trạng thái hiện tại | Sự kiện | Trạng thái kế tiếp | Output mong đợi |
|---|---|---|---|
| S0 — OTP active, timer chạy | Nhập OTP đúng | SUCCESS | Verification successful + timer DỪNG + form lock |
| S0 | Nhập OTP sai (lần 1) | S1 | Invalid OTP. 2 attempts remaining |
| S1 | Nhập OTP sai (lần 2) | S2 | Invalid OTP. 1 attempt remaining |
| S2 | Nhập OTP sai (lần 3) | BLOCKED | Too many failed attempts. Account temporarily blocked. |
| S0/S1/S2 | Hết 30s timer | EXPIRED | OTP expired. Please click Resend to receive a new code. |
| EXPIRED | Nhập OTP cũ (kể cả đúng) | EXPIRED | Vẫn báo expired — không chấp nhận |
| S1/S2/EXPIRED | Click Resend (sau cooldown 15s) | S0 | OTP mới sinh, timer reset 30s, attempt counter reset 0 |
| Bất kỳ state nào | Click Resend khi đang cooldown | Giữ nguyên | Button bị disable / message Please wait N seconds |
| BLOCKED | Submit / Resend | Giữ nguyên | Tất cả thao tác bị từ chối |
| Trường hợp | Message |
|---|---|
| Chưa nhập đủ 6 số | Please input full 6-digit OTP |
| OTP sai (còn N attempts) | Invalid OTP. N attempts remaining (số ít: 1 attempt remaining) |
| OTP hết hạn | OTP expired. Please click Resend to receive a new code. |
| Quá 3 lần sai | Too many failed attempts. Account temporarily blocked. |
| Click Resend khi đang cooldown | Please wait N seconds before requesting a new OTP |
| OTP đúng | Verification successful |
1 attempt (số ít) vs 2 attempts (số nhiều); 1 second vs 2 seconds.Form thực hành chỉ dành cho học viên đã đăng nhập.
Tab này chứa danh sách các lỗi đã cài cắm trong form. Vui lòng nhập mã giảng viên để mở khóa. Mã sẽ ghi nhớ trong phiên làm việc — chỉ cần nhập 1 lần cho cả 3 bài.