Junior
Descrivi la meccanica del processo di login dell'utente nel sistema.
sobes.tech AI
Risposta dell'AI
- L'utente inserisce le proprie credenziali (nome utente e password) nella pagina di login.
- Il browser invia una richiesta HTTP POST al server con i dati inseriti.
- Il server riceve la richiesta e la passa al componente di autenticazione.
- Il componente di autenticazione verifica i dati ricevuti con le informazioni nel database degli utenti:
- Controlla se esiste un utente con quel nome utente.
- Hasha la password inserita e la confronta con l'hash della password memorizzata per quell'utente.
- In caso di autenticazione riuscita:
- Il server crea una sessione per l'utente o genera un token di accesso (ad esempio, JWT).
- La sessione/o il token viene associato a un identificatore unico dell'utente e contiene informazioni sui suoi diritti di accesso.
- Il server invia una risposta HTTP con codice 200 OK e trasmette la sessione (tramite cookie) o il token di accesso al browser dell'utente.
- Il browser salva il cookie o il token.
- L'utente viene reindirizzato alla pagina principale o alla pagina di destinazione.
- In caso di fallimento dell'autenticazione (nome utente o password errati):
- Il server invia una risposta HTTP con un codice di errore (ad esempio, 401 Unauthorized) e un messaggio di errore.
- Il browser mostra un messaggio di errore all'utente sulla pagina di login.
- In richieste successive a risorse protette, il browser invia automaticamente la sessione salvata (cookie) o il token di accesso nelle intestazioni della richiesta HTTP.
- Il server verifica la validità della sessione/del token e permette l'accesso alla risorsa se l'autenticazione è confermata e l'utente ha i diritti necessari.
Esempio (pseudocodice):
# Sul server
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": "Credenziali non valide"}
# Sul client (nel browser)
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") {
// Il server imposterà un cookie con session_id, o possiamo salvare il token dalla risposta
window.location.href = "/dashboard";
} else {
alert(data.message);
}