3 horas atrás
(3 horas atrás)White_Blue Escreveu: Repare na sequência de eventos:
O problema é que PlayerInfo[playerid][Salt] e PlayerInfo[playerid][pSenha] estão vazios nesse momento, porque a função CarregarDados (que preenche esses valores) ainda não foi chamada. Você está comparando a senha digitada com nada.
- O jogador clica para logar;
- O seu código executa a função `SHA256_PassHash` usando o valor armazenado em `PlayerInfo[playerid][Salt]` como salt;
- Depois, compara o resultado com `PlayerInfo[playerid][pSenha]`;
- Somente se a comparação for bem-sucedida, você chama CarregarDados(playerid).
Você precisa ler o salt e a senha já hasheada do arquivo do jogador antes de fazer a comparação. Apenas depois que a senha for validada, você pode chamar CarregarDados para carregar o resto das informações.
Código PHP:else // linha 609
{
new senhaformatada[MAX_PASSWORD_LEN];
// PlayerInfo[playerid][Salt] e PlayerInfo[playerid][pSenha] estão vazios
SHA256_PassHash(SenhaInformada[playerid], PlayerInfo[playerid][Salt], senhaformatada, MAX_PASSWORD_LEN);
if(!strcmp(senhaformatada, PlayerInfo[playerid][pSenha], false, MAX_PASSWORD_LEN))
{
CarregarDados(playerid); // Carrega os dados só depois do login, mas é tarde demais para a verificação.
}
else
{
Erro[playerid] ++;
if(Erro[playerid] == 3) Kick(playerid), ErrorMsg(playerid, "Voce foi kickado por errar a senha muitas vezes.");
Dialog_Show(playerid, LoginServidor, DIALOG_STYLE_PASSWORD, "Efetuando login no servidor", "Digite sua senha para logar. \n*Sua senha estava incorreta", "Confirmar", "Cancelar");
}
}
Pode está me mostrando como resolveria? Para eu ter uma noção no que eu deixei passar.. nesse momento estou testando oque me informou.
