GilRiker
Дебютант
Суть проблемы: По уроку задумано после авторизации спавн персонажа. В моем случае, после ввода пароля окно закрывается и ничего не происходит, но проверка на правильность пароля проходит(за не правильные попытки кикает)
При всём этом аккаунты записует в базу
Не смог найти ошибку, даже когда переписывал все с самого начала буква в букву, видимо я действительно что то упускаю( в первый раз была примерно такая же ошибка).
Если ещё какой-то кусок кода нужен - прикреплю, вроде указал все в которых задействованы msql и salt
(на скрине сократил длину пароля, там верно 64 символа)
Ошибки MySQL
Ошибка из логов при регистрации аккаунта
Ошибка из логов при попытки авторизации аккаунта
При всём этом аккаунты записует в базу
Не смог найти ошибку, даже когда переписывал все с самого начала буква в букву, видимо я действительно что то упускаю( в первый раз была примерно такая же ошибка).
Если ещё какой-то кусок кода нужен - прикреплю, вроде указал все в которых задействованы msql и salt
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Код:
enum player
{
ID,
NAME[MAX_PLAYER_NAME],
PASSWORD[65],
SALT[11],//соль пробовал менять на 12, так и не разобрался с нульсимволом(учитывать его или нет)
EMAIL[65],
REF,
SEX,
NAC,
AGE,
SKIN,
REGDATA[13],
REGIP[16],
}
Код:
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME);
TogglePlayerSpectating(playerid, 1);
InterpolateCameraPos(playerid, 1962.0604, 2041.7426, 31.5849, 1768.7788, 2226.7825, 20.6472, 20000);
static const fmt_query[] = "SELECT `password`, `salt` FROM `users` WHERE `name` = '%s'"; //проверка наличия акка
new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), fmt_query, player_info[playerid][NAME]);
mysql_tquery(dbHandle, query, "CheckRegistration", "i", playerid);
SetPVarInt(playerid, "WrongPassword", 3);
return 1;
}
forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows)
{
cache_get_value_name(0, "password", player_info[playerid][PASSWORD], 65);
cache_get_value_name(0, "salt", player_info[playerid][SALT], 11);
ShowLogin(playerid);
}
else ShowRegistration(playerid);
}
}
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
//==============================================================================
case DLG_REG:
{
if(response)
{
if(!strlen(inputtext))
{
ShowRegistration(playerid);
return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\"");
}
if(!(8 <= strlen(inputtext) <= 32))
{
ShowRegistration(playerid);
return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Длина пароля должна быть от 8-ми до 32-х символов ");
}
new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9]{1,}$");
if(regex_check(inputtext, rg_passwordcheck))
{
new salt[11];
for(new i; i < 10; i++)
{
salt[i] = random(79) + (47);
}
salt[10] = 0;
SHA256_PassHash(inputtext, salt, player_info[playerid][PASSWORD], 65);
strmid(player_info[playerid][SALT], salt, 0, 11, 11);
//----------------------------------------------------------
SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{0e78d7}Регистрация{FFFFFF} * Ввод Emaill"
...... ,
Код:
//------------------------------------------------------------------
static const fmt_query[] = "INSERT INTO `users` (`name`, `password`, `salt`, `email`, `ref`, `sex`, `nac`, `age`, `skin`, `regdata`, `regip`) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%s', '%s')";
new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)+(-2+10)+(-2+64)+(-2+8)+(-2+1)+(-2+1)+(-2+2)+(-2+3)+(-2+12)+(-2+15)];
format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD], player_info[playerid][SALT], player_info[playerid][EMAIL], player_info[playerid][REF], player_info[playerid][SEX], player_info[playerid][NAC], player_info[playerid][AGE], player_info[playerid][SKIN], date, ip);
mysql_query(dbHandle, query);
//------------------------------------------------------------------
static const fmt_query2[] = "SELECT * FROM `users` WHERE `name` = `%s` AND `password` = `%s`";
format(query, sizeof(query), fmt_query2, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
Код:
case DLG_LOG:
{
if(response)
{
new checkpass[65];
SHA256_PassHash(inputtext, player_info[playerid][SALT], checkpass, 65);
if(strcmp(player_info[playerid][PASSWORD], checkpass, false, 64) == 0)
{
static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = `%s` AND `password` = `%s`";
new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)];
format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
}
else
{
new string[80];
SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")-1);
if(GetPVarInt(playerid, "WrongPassword") > 0)
{
format(string, sizeof(string), "[Ошибка] {FFFFFF}Вы ввели неверный пароль от аккаунта,у вас осталось %d попыток.", GetPVarInt(playerid, "WrongPassword"));
SCM(playerid, COLOR_RED, string);
}
if(GetPVarInt(playerid, "WrongPassword") == 0)
{
SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Вы исчерпали лимит попыток и были отключены от сервера.");
SPD(playerid, -1, 0, " ", " ", " ", "");
return Kick(playerid);
}
ShowLogin(playerid);
}
}
else
{
SCM(playerid, COLOR_RED, "Используйте \"/q\" что что бы покинуть сервер.");
SPD(playerid, -1, 0, " ", " ", " ", "");
return Kick(playerid);
}
Код:
//PlayerLogin-------------------------------------------------------------------
forward PlayerLogin(playerid);
public PlayerLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows)
{
cache_get_value_name_int(0, "id", player_info[playerid][ID]);
cache_get_value_name(0, "email", player_info[playerid][EMAIL], 64);
cache_get_value_name_int(0, "ref", player_info[playerid][REF]);
cache_get_value_name_int(0, "sex", player_info[playerid][SEX]);
cache_get_value_name_int(0, "nac", player_info[playerid][NAC]);
cache_get_value_name_int(0, "age", player_info[playerid][AGE]);
cache_get_value_name_int(0, "skin", player_info[playerid][SKIN]);
cache_get_value_name(0, "regdata", player_info[playerid][REGDATA],1211);
cache_get_value_name(0, "regip", player_info[playerid][REGIP],15);
//----------------------------------------------------------------------
TogglePlayerSpectating(playerid, 0);
SetPVarInt(playerid, "logged", 1);
SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
}
return 1;
}
//PlayerLogin-------------------------------------------------------------------
[11/30/21 01:13:13] [ERROR] error #1054 while executing query "SELECT * FROM `users` WHERE `name` = `Test_Test3` AND `password` = `4B6422647BC4567DCCF975A168B6302755EC3935B1F4DB97EF2265A267627F1F`": Unknown column 'Test_Test3' in 'where clause' Ошибка из логов при регистрации аккаунта
[11/30/21 01:14:34] [ERROR] error #1054 while executing query "SELECT * FROM `users` WHERE `name` = `Test_Test3` AND `password` = `4B6422647BC4567DCCF975A168B6302755EC3935B1F4DB97EF2265A267627F1F`": Unknown column 'Test_Test3' in 'where clause' Ошибка из логов при попытки авторизации аккаунта
Последнее редактирование модератором:
