Junior
Механикаи раванди воридшавии корбар дар системро тавсиф диҳед.
sobes.tech AI
Ҷавоб аз AI
- Истифодабаранда маълумотҳои корбар (номи корбар ва парол) дар саҳифаи воридшавӣ.
- Браузер HTTP POST-захираро ба сервер бо маълумотҳои воридшуда мефиристад.
- Сервер талабро қабул мекунад ва маълумотҳоро ба компоненти тасдиқот мефиристад.
- Компоненти тасдиқот маълумотро бо маълумоти дар базаи додаҳои корбарон ёфтанӣ муқоиса мекунад:
- Санҷед, ки оё корбар бо чунин номи корбар вуҷуд дорад.
- Паролро ҳеш мекунад ва онро бо ҳеши парол, ки барои ин корбар нигоҳ дошта шудааст, муқоиса мекунад.
- Дар ҳолати тасдиқи муваффақ:
- Сервер сессия барои корбар месозад ё токени дастрасӣ (масалан, JWT) мебарорад.
- Сессия/токен бо идентификатори беназири корбар пайваст мешавад ва маълумот дар бораи ҳуқуқҳои дастрасии ӯ дорад.
- Сервер ҷавобро бо коди 200 OK мефиристад ва сессия (бо истифода аз куки) ё токени дастрасӣ ба браузер медиҳад.
- Браузер куки ё токенро нигоҳ медорад.
- Корбар ба саҳифаи асосӣ ё мақсадноки худ равона мешавад.
- Дар ҳолати номуваффақият (номи корбар ё пароли нодуруст):
- Сервер ҷавобро бо коди хато (масалан, 401 Unauthorized) ва паёми хато мефиристад.
- Браузер паёми хато нишон медиҳад.
- Дар дархостҳои оянда ба захираҳои муҳофизатшуда, браузер автоматӣ сессия (куки) ё токени дастрасиро дар сарлавҳаҳои HTTP мефиристад.
- Сервер дурустии сессия ё токенро санҷида, дастрасиро иҷозат медиҳад, агар тасдиқи аутентификация тасдиқ шуда бошад ва корбар ҳуқуқҳои заруриро дошта бошад.
Масалан (псеудокод):
# Дар сервер
def login(username, password):
user = database.find_user(username)
if user and hash(password) == user.hashed_password:
session_id = generate_session_id(user.id)
database.save_session(session_id, user.id)
return {"status": "success", "session_id": session_id}
else:
return {"status": "fail", "message": "Invalid credentials"}
# Дар клиент (дар браузер)
async function handle_login_submit(event):
event.preventDefault();
const username = document.getElementById("username").value;
const password = document.getElementById("password").value;
const response = await fetch("/api/login", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ username, password })
});
const data = await response.json();
if (data.status === "success") {
// Сервер куки бо session_id мегузорад, ё мо метавонем токенро аз ҷавоб нигоҳ дорем
window.location.href = "/dashboard";
} else {
alert(data.message);
}