Вопросы

rediska
Освоившийся

Всем привет! Я пишу своё мод с нуля, и тут у меня возникла проблема с авторизацией. Я не могу сделать проверку на правильность введённого пароля.

        case DLG_LOG:
        {
            if(response)
            {
                //ВОТ ТУТ ДОЛЖНА БЫТЬ ПРОВЕРКА НА ПРАВИЛЬНОСТЬ ПАРОЛЯ
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+32)];
                    format(query, sizeof(query), fmt_query, player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                    SCM(playerid, COLOR_GOLD, "Вы авторизовались!");
                }
                else
                {
                    new string[87];
                    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, -10" "" "" """);
                        return Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_RED, "Используйте \"/q(uit)\", для выхода из игры");
                SPD(playerid, -10" "" "" """);
                return Kick(playerid);
            }
        }
    }
    return 1;

 

Поделиться сообщением


Ссылка на сообщение

27 ответов на этот вопрос

  • 0
_bogdan_
Завсегдатый

@rediska 

                if(GetPVarInt(playerid, "WrongPassword") == 2return SCM(playerid,COLOR_LIGHTRED," Неверный пароль. Используйте /q для выхода."), Kick(playerid);
                SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);
                format(QUERY,256"Ваш текст.",3-GetPVarInt(playerid, "WrongPassword"));
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX, "Ошибка!",QUERY, "Повтор""Выйти");

 

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@_bogdan_ Это у меня есть. Мне нужна проверка на правильность введённого пароля, вот она:

if(inputtext, player_info[playerid][PASSWORD])

И она не работает, она пропускает любой введёный пароль

 

Код самой авторизации

Спойлер

case DLG_LOG:
        {
            if(response)
            {
                if(inputtext, player_info[playerid][PASSWORD])
                {
                    new query[126];
                    format(query, sizeof query, "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'", player_info[playerid][NAME], player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                }
                else
                {
                    new string[87];
                    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, -10" "" "" """);
                        return Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_RED, "Èñïîëüçóéòå \"/q(uit)\", äëÿ âûõîäà èç èãðû");
                SPD(playerid, -10" "" "" """);
                return Kick(playerid);
            }
        }
    }
    return 1;
}

 

 

Отредактировано пользователем rediska

Поделиться сообщением


Ссылка на сообщение
  • 0
15 часов назад, rediska сказал:

                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";

этот запрос по сути и проверяет правильность пароля. 

Вы достаете всю информацию по пользователю, у которого такой ник и пароль. 

15 часов назад, rediska сказал:

                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);

вот эта строка отправляет SQL запрос, его результат придет в public PlayerLogin. 

Там необходимо проверить количество строк, если их ноль => пользователя с таким логином и паролем нет, в противном случае там будет вся информация по этому пользователю из базы данных. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@rediska а что значит теперь? Я же не вносил никаких правок, я просто рассказал что и за что отвечает. 

В коде этого диалога (как я понимаю это диалог ввода пароля) должно остаться только формирование запроса и его отправка с помощью mysql_tquery. Вся остальная логика должна быть вынесена в PlayerLogin, туда придет ответ от плагина mysql

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@DEST не подскажешь как исправить? warning 219: local variable "query" shadows a variable at a preceding level

строчка на которую жалуется:

new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+32)];

 

Поделиться сообщением


Ссылка на сообщение
  • 0
_bogdan_
Завсегдатый

@rediska 

warning 219: local variable "%s" shadows a variable at a preceding level - переменная дважды объявлена;

@rediska У вас дважды обьявлена одна и та же переменная. Из-за чего появилась ошибка.

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@_bogdan_ так её тут не убрать, вот код:

if(response)
            {
                new checkpass[32];
                new query[126];
                static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                if(strcmp(player_info[playerid][PASSWORD], checkpassfalse))
                {
                    static const fmt_query2[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+32)];//ОШИБКА ТУТ - warning 219: local variable "query" shadows a variable at a preceding level
                    format(query, sizeof(query), fmt_query, player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                }

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@rediska тут нужно остановиться, дать отдохнуть рукам и перестать просто копировать код. Нужно подумать. 

Зачем нужно условие 

2 часа назад, rediska сказал:

                if(strcmp(player_info[playerid][PASSWORD], checkpassfalse))

если я раннее писал, что в этом диалоге не получится проверить правильность пароля. 

У нас есть то, что нам ввел пользователь, но нет правильного пароля. Поэтому в strcmp не получится ничего сравнить. 

Давайте мелкими шагами, задача: оставить в диалоге только формирование и отправку SQL запроса. Как сделаете, скидывайте сюда что получилось. 

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@DEST 

new checkpass[32];
mysql_tquery(inputtext, player_info[playerid][PASSWORD], checkpass, 32);
if(strcmp(player_info[playerid][PASSWORD], checkpassfalse32) == 0 && isnull(checkpass))

и она жалуется сейчас на строчку:

mysql_tquery(inputtext, player_info[playerid][PASSWORD], checkpass, 32);

Ошибка:error 035: argument type mismatch (argument 1)

error 035: argument type mismatch (argument 1)

 

Отредактировано пользователем rediska

Поделиться сообщением


Ссылка на сообщение
  • 0

@rediska создали переменную checkpass, затем вызвали mysql_tquery, проверили на совпадение строку player_info[playerid][PASSWORD] и то, что хранится в новой переменной checkpass. 

Что этот набор действий должен был сделать? 

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@DEST Я просто только начал заниматься этим делом. И мод пишу по урокам. Ещё пока что не совсем понимаю что и как делать. Можете подсказать?

Поделиться сообщением


Ссылка на сообщение
  • 0

@rediska Вот хорошая точка старта => https://pro-pawn.ru/showthread.php?4082-Учебник-Pro-Pawn-ru

Посмотрите, почитайте уроки что там есть (их там немного, всего 15). Это даст больше понимания того, что происходит в коде и как он вообще выполняется. 

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@DEST Хорошо прочту я как раз ищу такие уроки. Ну я так понимаю мне с моей проблемой не помогут?

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@rediska конечно помогут, но чтобы понять то,  что вам пытаются подсказать, нужно основы узнать. Иначе так и останетесь на уровне скопировать -вставить. 

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@DEST не рабочая ссылка на скачку

 

Отредактировано пользователем rediska

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@SCRIPTMAN не подскажешь как сделать запрос в бд проверку на правильность пароля. А то у меня мод уже 4 день стоит

Поделиться сообщением


Ссылка на сообщение
  • 0
_bogdan_
Завсегдатый

@rediska Могу посоветовать один хороший канал на YouTube(не реклама), человек писал мод с нуля. Можете посмотреть видео-уроки, так же там есть видео-уроки по написанию системы авторизации/регистрации. Тык

Поделиться сообщением


Ссылка на сообщение
  • 0
rediska
Освоившийся

@_bogdan_ По его видео и делаю мод.У меня проблема в том что он подключал соль(шифровку) и через неё делает проверку пароля, а я не стал этого делать и теперь не знаю как сделать проверку.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Дебилойд
      От Дебилойд
      Здравствуйте!
      Мы ищем талантливого 3D-моделлера в команду нашего CRMP-проекта!
      Что нужно будет делать:
      Моделировать и адаптировать автомобили.
      Создавать и настраивать скины (модели персонажей).
      Большим плюсом будет:
      Умение создавать качественные и оптимизированные интерьеры.
      Если вы хотите стать частью нашей команды и развивать проект вместе с нами, пишите в ЛС. Ждем ваши портфолио!
    • LORDIKUS
      От LORDIKUS
      Уважаемые участники форума - всех приветствую, кто перешел в беседу моей темы обсуждения. В настоящее время у меня зарождается огромное желание и мысль создать собственный CR:MP проект, но столкнулся с единственной проблемой - с отсутствием команды людей, у которых будет искреннее желание ежедневно вкладывать свой труд на разработку проекта. Особого опыта в скриптинге, маппинге, дизайне или в моделировании у меня не имеется, поэтому такой критерий как опыт в определенной сфере для желающих вступить в команду я не рассматриваю. Так как проект не открыт и находится на начальной стадии создания, мое сотрудничество выстраивается на некоммерческой основе (без выплаты за проделанную работу и труд), однако я не собираюсь отрицать высокую ценность вложенного командой труд — труд, особенно на первой стадии разработки я рассматриваю превыше всего. После открытия проекта в зависимости от коммерции и чистой прибыли каждый участник будет получать настоящую выплату, однако это также может убить еще значительное время. Мне нужна команда, которая проявит искренний интерес в создании общего между командой CR:MP проекта, пожертвует свое время, а также вложит собственный труд благодаря заработанным навыкам. Если вас заинтересовала данная тема обсуждения, пожалуйста, свяжитесь со мной по любым возможным и удобным для вас контактам связи ниже. Спасибо всем, кто зашел в мою беседу!

      🔗 Спец. Связь:
      — DISCORD: https://discord.com/users/1452715348196589691 (перейти по ссылке и добавить в друзья) ИЛИ _shin833_ (ввести никнейм и отправить запрос дружбы)
      — VK: https://vk.com/shin833
      — TG: https://t.me/s_hin833
    • Korochansky
      От Korochansky
      Настало время объявить о скором выпуске первого релиза среды разработки под названием Spawn.

      В настоящее время программа находится на заключительных этапах доработки кода и локализации интерфейса.
      Таким образом, в течение следующей недели будет выпущена быстрая и современная среда разработки, обладающая следующими возможностями (о которых я расскажу сейчас, а о других — позже):
       
      Полнофункциональный локальный Git: 
      Индексирование, фиксации, индикаторы состояния и мягкий/жесткий сброс до любой точки сохранения одним щелчком мыши. Разрабатывайте свой игровой сервер, не боясь его сломать.
      Новички могут рассматривать это как историю кодовой базы вашего сервера (что и есть на самом деле).
       
      Чистый UTF-8 (без BOM): 
      Полный отказ от устаревшей кодировки Windows-1251 (CP1251) для абсолютной стабильности и идеальной совместимости с Git.
      Реализация поддержки CP1251 привела бы к нестабильному поведению программы и ухудшила бы пользовательский опыт.
       
      История изменений строк: Редактор выделяет измененные строки в реальном времени в полях рядом с номерами строк. Это позволяет мгновенно видеть границы изменений, внесенных с момента открытия файла.
       
      Сопоставление и выделение фигурных скобок: мгновенное выделение открывающих и закрывающих фигурных скобок для быстрой навигации по структуре кода и защиты от ошибок компиляции.
       
      Интеграция с SAMPCTL: готовая к использованию автоматизация процессов. Сборка, запуск сервера и менеджер зависимостей (управление библиотеками и плагинами) работают напрямую из интерфейса редактора.
       
      И многое другое...
       
      И самое главное: проект будет с открытым исходным кодом под лицензией GPLv3!
      Следите за новостями о выпуске в репозитории: https://github.com/daniilkorochansky/spawn
    • KodBi
      От KodBi
      шапка
      по одиночке работают
      нужны оба