| Version 2 (modified by , 2 weeks ago) ( diff ) |
|---|
UC001 - Најава во системот
Иницијален актер: Посетител
Други актери: -
Посетителот сака да се автентицира со е-пошта и лозинка и да добие пристап до функционалностите наменети за неговата улога. Целта е издаден пристапен токен со кој сите останати случаи на употреба знаат кој е корисникот и што смее да прави.
Сценарио
- Посетителот ја отвора почетната страница и ги внесува е-поштата и лозинката.
- Системот го бара корисникот по е-пошта. Колоната email има ограничување UNIQUE, па барањето враќа најмногу еден ред.
SELECT id, email, password, role FROM project.users WHERE email = 'stefan.saveski@students.finki.ukim.mk';
- Ако не е пронајден корисник, системот прикажува иста порака како и при погрешна лозинка, за да не се открие кои е-пошти постојат во системот.
- Системот ја споредува внесената лозинка со зачуваниот BCrypt hash. Споредбата се врши во апликацијата, бидејќи во базата се чува само hash-от.
- Ако лозинката е точна, системот издава пристапен токен (JWT) кој ги содржи идентификаторот, е-поштата и улогата на корисникот.
- Ако корисникот побарал да остане најавен, системот запишува и токен за освежување.
INSERT INTO project.token (user_id, token, expires_at, is_valid) VALUES (1, 'BCfXBUR-Q2E7Vkglwh5OmdbhHH0MS-askSO8M0W6sRk', now() + interval '1 month', TRUE);
- Системот го пренасочува корисникот според улогата: студентите кон студентскиот дел, професорите кон професорскиот.
- При подоцнежно освежување на сесијата, системот го проверува токенот за освежување.
SELECT t.id, t.user_id, u.email, u.role FROM project.token t JOIN project.users u ON u.id = t.user_id WHERE t.token = 'BCfXBUR-Q2E7Vkglwh5OmdbhHH0MS-askSO8M0W6sRk' AND t.is_valid = TRUE AND t.expires_at > now();
- При одјава, системот го поништува токенот без да го брише, за да остане трага.
UPDATE project.token SET is_valid = FALSE WHERE user_id = 1 AND is_valid = TRUE;
Алтернативни текови
- 3а. Непостоечка е-пошта или погрешна лозинка - системот прикажува општа порака за неуспешна најава.
- 8а. Токенот е истечен или поништен - барањето не враќа ниту еден ред и корисникот мора повторно да се најави.
Забелешки
- Улогата се чува како набројувачки тип user_role со вредности 'student', 'prof' и 'admin', па во базата не може да се внесе непостоечка улога.
Note:
See TracWiki
for help on using the wiki.
