М
МаркГленNov. 15, 2020, 11:23 a.m.

Qt Qml C++ PostgreSQL Login Registration form

registration, login

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

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

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

16
Алексей Внуков
  • Nov. 15, 2020, 8:39 p.m.

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

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

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

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

      Алексей Внуков
      • Nov. 16, 2020, 7:15 a.m.
      • (edited)

      а вы четко сформулируйте что вы делаете, чего хотите достичь на каждом этапе и чего у вас не получается. зачем создавать пользователя? к моменту обращения к БД у вас уже должна быть настроенная и сформированная база, и в конекте к ней должен быть указан логин/пароль от 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;
      }
      

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

        М
        • Nov. 16, 2020, 7:51 a.m.

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

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

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

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

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

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

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

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

          Алексей Внуков
          • Nov. 16, 2020, 1:07 p.m.
          • (edited)

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

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

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

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

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

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

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

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

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

              Alexander
              • Nov. 16, 2020, 3:25 p.m.
              • (edited)

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

                Alexander
                • Nov. 16, 2020, 3:34 p.m.

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

                  М
                  • Nov. 16, 2020, 3:54 p.m.

                  QtWebApp.. REST

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

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

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

                      Alexander
                      • Nov. 17, 2020, 6:07 a.m.

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

                        М
                        • Nov. 19, 2020, 1:07 a.m.

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

                          Alexander
                          • Nov. 19, 2020, 1:11 a.m.

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

                            М
                            • Nov. 19, 2020, 1:49 a.m.

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

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

                              Alexander
                              • Nov. 29, 2020, 5:12 p.m.

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

                                М
                                • Dec. 1, 2020, 12:06 a.m.

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

                                  Comments

                                  Only authorized users can post comments.
                                  Please, Log in or Sign up
                                  AD

                                  C ++ - Test 004. Pointers, Arrays and Loops

                                  • Result:50points,
                                  • Rating points-4
                                  m

                                  C ++ - Test 004. Pointers, Arrays and Loops

                                  • Result:80points,
                                  • Rating points4
                                  m

                                  C ++ - Test 004. Pointers, Arrays and Loops

                                  • Result:20points,
                                  • Rating points-10
                                  Last comments
                                  i
                                  innorwallNov. 11, 2024, 10:12 p.m.
                                  Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
                                  i
                                  innorwallNov. 11, 2024, 6:23 p.m.
                                  QML - Tutorial 035. Using enumerations in QML without C ++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
                                  i
                                  innorwallNov. 11, 2024, 3:50 p.m.
                                  Qt/C++ - Lesson 052. Customization Qt Audio player in the style of AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
                                  i
                                  innorwallNov. 11, 2024, 2:19 p.m.
                                  Heap sorting algorithm The role of raloxifene in preventing breast cancer priligy precio
                                  i
                                  innorwallNov. 11, 2024, 1:55 p.m.
                                  PyQt5 - Lesson 006. Work with QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
                                  Now discuss on the forum
                                  i
                                  innorwallNov. 11, 2024, 8:56 p.m.
                                  добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
                                  i
                                  innorwallNov. 11, 2024, 10:55 a.m.
                                  Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                                  9
                                  9AnonimOct. 25, 2024, 9:10 a.m.
                                  Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                                  Follow us in social networks