М
МаркГленҚар. 15, 2020, 11:23 Т.Ж.

Qt Qml C++ PostgreSQL Login Registration form

registration, login

Вопрос в стиле "Расскажите как устроена вселенная". Но надо с чего-то начинать.

Подскажите как сделать форму регистрации и аутентификации, с чего начать, как потренироваться. Qt C++, qml, БД pgSQL. Не знаю с какой стороны подходить. Может есть какие-то мануальчики хорошие?

Как сделать формочку ввода пароля и логина или настроить подключение к бд рассказывать понятное дело не нужно, а вот всё остальное нужно. Пожалуйста.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

16
Алексей Внуков
  • Қар. 15, 2020, 8:39 Т.Қ.

та как), рисуем форму в поле пароля ставим тип ввода - пароль (чтоб вместо ввода были звездочки), делаем проверку на пустые поля, после нажатия кнопки проверяем связку логин/пароль, если все ок пускаем дальше, нет выводим сообщение что ошибка

    М
    • Қар. 16, 2020, 2:16 Т.Ж.

    Спасибо за ответ!)

    Прекрасно, с логином разобрались, всё очень просто) На самом деле до него ещё не добрался, т.к. застрял на регистрации. Раньше я всё делал в SQLite без всяких логинов/регистраций, поэтому даже не задумывался что это целая проблема.

    Проблема: как безопасно вызвать команду "CREATE USER .."? Для того чтобы создать нового юзера надо обладать правами суперпользователя, то есть надо забить в код логин/пароль суперюзера, и это какое-то бредовое направление, тут я сломался. То есть когда я до этого дошёл то понял, что на самом деле всё происходит принципиально по-другому, и путь по которому я интуитивно пошёл скорее всего не актуален лет 25 как. Так что тут у меня нет общего видения, идеологии, концепции, совокупности принципов и подходов. И нагуглить для qt/c++ получилось только сомнительные видосики индийских друзей. Продолжаю судорожно гуглить дальше.

      Алексей Внуков
      • Қар. 16, 2020, 7:15 Т.Ж.
      • (өңделген)

      а вы четко сформулируйте что вы делаете, чего хотите достичь на каждом этапе и чего у вас не получается. зачем создавать пользователя? к моменту обращения к БД у вас уже должна быть настроенная и сформированная база, и в конекте к ней должен быть указан логин/пароль от PostgreSQL, и уже после когода у вас есть открытое соединение вы делаете запрос в базу на проверку логина/пароля. Что-то типа:

      void connect_to_db()
      {
          QSqlDatabase db;
          db=QSqlDatabase::addDatabase("QPSQL","connect_name");
          db.setHostName("localhost");
          db.setDatabaseName("db_name");
          db.setUserName("user");
          db.setPort(5432);
          if(db.open())
          {
              qDebug()<<"DB opened";
          }
          else
          {
              qDebug()<<"db not open"<<db.lastError();
          }
      }
      
      bool check_login(QString login, QString pwd)
      {
          QString passwd;
          QSqlQuery query(QSqlDatabase::database("connect_name"));
          QString str=QString("select passwd from users where login='%1'").arg(login);
                  if (!query.exec(str))
                  {
                      qDebug()<<"select error " <<query.lastError()<<query.lastQuery();
                  }
                  while (query.next())
                  {
                      passwd=query_pin.value(0).toString();
                  }
           if (passwd==pwd) return true;
           else return false;
      }
      

      данные о пользователе уже должны быть в базе

        М
        • Қар. 16, 2020, 7:51 Т.Ж.

        сформулируйте что вы делаете

        Пользователь подключается к базе, читает информацию из нескольких таблиц базы (вопросы, справочные материалы).
        Производит некоторое взаимодействие с данной информацией на своём устройстве (отвечает на вопросы, заполняет формы).
        Результат взаимодействия с данной инфой (количество правильных/неправильных ответов, названия разделов с которыми работал, категории данных по которым допущены ошибки) отправляется в базу в другие таблицы ассоциированные с данным пользователем. Последнее можно конечно оставлять на устройстве, но хотелось бы забирать.

        данные о пользователе уже должны быть в базе

        База, с которой взаимодействует пользователь - удалённая, не на его устройстве, а в сети.

        чего у вас не получается

        создать форму регистрации для всех желающих

        зачем создавать пользователя?

        Неожиданный вопрос.. может быть действительно не нужно создавать пользователя и отдавать всю инфу целиком на устройство. Но тогда не получится собирать статистику для улучшения качества продукта, контролировать процесс, видеть вовлечённость, создавать рейтинги, много чего. Нет, нужна регистрация и авторизация как в типичном полуразвлекательном/образовательном приложении для взрослых и детей.

          Алексей Внуков
          • Қар. 16, 2020, 1:07 Т.Қ.
          • (өңделген)

          не важно где находится база, нельзя давать кому попало к ней доступ. читайте информационную безопасность.к любой базе данных можно получить удаленный доступ, точно также сделать запрос, обработать его и сохранить данные.
          вам нужно создать форму регистрации пользователя, по окончанию регистрации присваиваете пользователю уникальный айди. после регистрации пользователь каждый раз когда будет входить в систему через логин пароль, будет передавать свой айди. по этому айди будете делать статистику. после удаленно подключаетесь к базе - нужен логин, пароль, айпи(должен быть белым) и открытый порт. логин пароль к базе для всех пользователей можно использовать один и тот же. делаете запрос в базу, он отправляется на сервер, обрабатывается и обратно возвращает результаты - например опросник, когда пользователь нажмет подтвердить все данные что он ввел отправляются на сервер и обрабатываюься, вместе с ними и унийкальный айди, по нему потом и получите что когда и как

            М
            • Қар. 16, 2020, 3:11 Т.Қ.

            нельзя давать кому попало к ней доступ

            Ок. Я думал это решается присваиванием пользователя группе с ограниченными правами, но видимо не всё так просто.

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

            Как происходит регистрация? Хотя бы мануальчик, ткните носом, пожалуйста! Настроить в БД Psql почтовый сервис который будет при создании записи о новом пользователе высылать на почту пароль/ID? Или решение искать в сторону QTcpServer, QTcpSocket и Qt Network? Читаю всё подряд по запросам типа "регистрация-авторизация пользователей", всё пока не приду к пониманию. Хочется конечно по привычке найти готовое решение и списать, думать совсем не хочется.

            Правильно ли я понимаю решение нужно искать в сторону клиент-серверного взаимодействия, читать про QTcpServer, QTcpSocket и Qt Network? то есть уникальный id формируется на серверной стороне, оттуда же создаётся в базе запись о новом пользователе с таким-то логином-паролем и id. Пользователю отправляется инфа о его логине-пароле, после успешного ввода логина/пароля ему отправляется его id и записывается где-то в файлике, а оттуда тянется при каждом обращении к базе. Типа "показать все разделы для которых id имеет статус доступно "

            передавать свой айди... подключаетесь к базе..

            как-то не очевидно для меня как это должно быть организовано. пока складываются такие дурацкие кратинки

            Или даже вот так

              Alexander
              • Қар. 16, 2020, 3:25 Т.Қ.
              • (өңделген)

              Забавные картинки))) только в дополнения к коду который приведен выше я бы пересылал в базу и логи и пароль, тобишь запрос выглядил так бы, "SELECT * FROM auth_user WHERE login=%1 AND pass=%2" так секьюритней. Ну и соответственно есть что то в селекте значит ок погнали а если нет, пишем что ключевая пара не найдена. Да не можем сказать что пользователь ошибся в пароле или в логине, но тем самым мы не передаем в ответ пароль, что в разы безопаснее, или вообще можно генерить sing и отдавать его вместо сушности юзера, но в таком случае получение его пирмишенов + 1 запрос, что при массовости не очень хорошо)

                Alexander
                • Қар. 16, 2020, 3:34 Т.Қ.

                А вообще если по серьезке, то надо понимать дизайн готовго продукта, если мы говорим о сайте то тут 3 сушности, БД (1я) Сервер который реализует логику и взаимодействует с базой (рассылает письма и прочая ерись) и клиент на базе стайдлон приложения или на пример QtWebApp. Короче надо изходить от бизнес задачи а потом проектировать. Естественно что бы было удобно клиент и сервер общаются через REST или кастомный протокол, но лучше рест, на нем сейчас 90% ком пазработки

                  М
                  • Қар. 16, 2020, 3:54 Т.Қ.

                  QtWebApp.. REST

                  Ну будет о чём почитать завтра. Посмотрю примеры, может сложится картинка.

                    Алексей Внуков
                    • Қар. 17, 2020, 3:49 Т.Ж.

                    Правильно ли я понимаю решение нужно искать в сторону клиент-серверного взаимодействия, читать про QTcpServer, QTcpSocket и Qt Network? то есть уникальный id формируется на серверной стороне, оттуда же создаётся в базе запись о новом пользователе с таким-то логином-паролем и id. Пользователю отправляется инфа о его логине-пароле, после успешного ввода логина/пароля ему отправляется его id и записывается где-то в файлике, а оттуда тянется при каждом обращении к базе. Типа "показать все разделы для которых id имеет статус доступно "

                    Примерно. Вообще вопрос регистрации и инициализации зависит от каждой конкретной задачи и от условий работы. можно вообще написать с нуля под конкретную задачу. единственное id не тянется, после авторизации клиент получает его от сервера, и потом вместе с любым обращением на сервер он передается в запросе для контроля и статистики

                      Alexander
                      • Қар. 17, 2020, 6:07 Т.Ж.

                      Ну там он так же передает какой то ид свой, в браузер это юзер агент, если просто по тср то мак или что то еще, что бы небыло возможности угнать токен доступа

                        М
                        • Қар. 19, 2020, 1:07 Т.Ж.

                        Короче говоря, поучу пока джангу, сделаю простенькое приложение на ней, гляну https://www.django-rest-framework.org/, и тогда уже продолжу страдать. Не помешает для общего развития, а то как-то всё сложновато оказалось.

                          Alexander
                          • Қар. 19, 2020, 1:11 Т.Ж.

                          В джангле не проще))) и достаточно сильно различаются подходы) Как по мне проще разобратся в плюсах чем с закидонами джанги

                            М
                            • Қар. 19, 2020, 1:49 Т.Ж.

                            Ну хорошо. Вот прямо сейчас пойду сделаю виртуальную машину с убунтой на яндекс облаке и разобью себе об неё башку.

                            Кстати, как же реализовать веб интерфейс для приложения если/когда он понадобится? Всё равно нужна будет джанго.

                              Alexander
                              • Қар. 29, 2020, 5:12 Т.Қ.

                              Нет есть чудесная QtWebApp а еще один интересный проект qdjango пока не разбирался, но как понял по факту обертка

                                М
                                • Жел. 1, 2020, 12:06 Т.Ж.

                                Да, посмотрел уже немного. Не хотелось бы сдаваться, но пока надо ещё много учиться.

                                  Пікірлер

                                  Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                  Кіріңіз немесе Тіркеліңіз
                                  OI
                                  • Ora Iro
                                  • Жел. 24, 2024, 6:38 Т.Ж.

                                  C++ - Тест 001. Первая программа и типы данных

                                  • Нәтиже:40ұпай,
                                  • Бағалау ұпайлары-8
                                  AD

                                  C++ - Тест 004. Указатели, Массивы и Циклы

                                  • Нәтиже:50ұпай,
                                  • Бағалау ұпайлары-4
                                  m
                                  • molni99
                                  • Қаз. 26, 2024, 1:37 Т.Ж.

                                  C++ - Тест 004. Указатели, Массивы и Циклы

                                  • Нәтиже:80ұпай,
                                  • Бағалау ұпайлары4
                                  Соңғы пікірлер
                                  ИМ
                                  Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                                  Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                  Evgenii Legotckoi
                                  Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                                  Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                  A
                                  ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                                  Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                  ИМ
                                  Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                                  Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                  d
                                  dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                  QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                  Енді форумда талқылаңыз
                                  Evgenii Legotckoi
                                  Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                                  добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                  t
                                  tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                                  google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                  NSProject
                                  NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                                  Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                                  9
                                  9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
                                  Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                                  Бізді әлеуметтік желілерде бақылаңыз