Junior
Descreva a mecânica do processo de login do usuário no sistema.
sobes.tech IA
Resposta da IA
- O utilizador insere os seus dados de login (nome de utilizador e palavra-passe) na página de login.
- O navegador envia uma requisição HTTP POST ao servidor com os dados inseridos.
- O servidor recebe a requisição e passa os dados de login para o componente de autenticação.
- O componente de autenticação verifica os dados recebidos com as informações na base de dados de utilizadores:
- Verifica se existe um utilizador com esse nome de utilizador.
- Hashea a palavra-passe inserida e compara com o hash da palavra-passe armazenada para esse utilizador.
- Em caso de autenticação bem-sucedida:
- O servidor cria uma sessão para o utilizador ou gera um token de acesso (por exemplo, JWT).
- A sessão/o token é associada a um identificador único do utilizador e contém informações sobre os seus direitos de acesso.
- O servidor envia uma resposta HTTP com o código 200 OK e transmite a sessão (através de cookie) ou o token de acesso ao navegador do utilizador.
- O navegador guarda o cookie ou o token.
- O utilizador é redirecionado para a página principal ou para a página alvo.
- Em caso de falha na autenticação (nome de utilizador ou palavra-passe incorretos):
- O servidor envia uma resposta HTTP com um código de erro (por exemplo, 401 Unauthorized) e uma mensagem de erro.
- O navegador exibe uma mensagem de erro ao utilizador na página de login.
- Em requisições subsequentes a recursos protegidos, o navegador envia automaticamente a sessão guardada (cookie) ou o token de acesso nos cabeçalhos da requisição HTTP.
- O servidor verifica a validade da sessão/do token e permite o acesso ao recurso se a autenticação for confirmada e o utilizador tiver os direitos necessários.
Exemplo (pseudo-código):
# No servidor
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": "Credenciais inválidas"}
# No cliente (no navegador)
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") {
// O servidor irá estabelecer um cookie com session_id, ou podemos guardar o token da resposta
window.location.href = "/dashboard";
} else {
alert(data.message);
}