М
МаркГлен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 р. 20:39

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

    М
    • 16 листопада 2020 р. 02:16

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

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

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

      Алексей Внуков
      • 16 листопада 2020 р. 07: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 р. 07:51

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

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

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

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

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

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

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

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

          Алексей Внуков
          • 16 листопада 2020 р. 13:07
          • (відредаговано)

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

            М
            • 16 листопада 2020 р. 15:11

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

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

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

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

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

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

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

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

              Alexander
              • 16 листопада 2020 р. 15:25
              • (відредаговано)

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

                Alexander
                • 16 листопада 2020 р. 15:34

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

                  М
                  • 16 листопада 2020 р. 15:54

                  QtWebApp.. REST

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

                    Алексей Внуков
                    • 17 листопада 2020 р. 03:49

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

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

                      Alexander
                      • 17 листопада 2020 р. 06:07

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

                        М
                        • 19 листопада 2020 р. 01:07

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

                          Alexander
                          • 19 листопада 2020 р. 01:11

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

                            М
                            • 19 листопада 2020 р. 01:49

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

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

                              Alexander
                              • 29 листопада 2020 р. 17:12

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

                                М
                                • 01 грудня 2020 р. 00:06

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

                                  Коментарі

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

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

                                  • Результат:50бали,
                                  • Рейтинг балів-4
                                  m
                                  • molni99
                                  • 26 жовтня 2024 р. 01:37

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

                                  • Результат:80бали,
                                  • Рейтинг балів4
                                  m
                                  • molni99
                                  • 26 жовтня 2024 р. 01:29

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

                                  • Результат:20бали,
                                  • Рейтинг балів-10
                                  Останні коментарі
                                  ИМ
                                  Игорь Максимов22 листопада 2024 р. 11:51
                                  Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                  Evgenii Legotckoi
                                  Evgenii Legotckoi31 жовтня 2024 р. 14:37
                                  Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                  A
                                  ALO1ZE19 жовтня 2024 р. 08:19
                                  Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                  ИМ
                                  Игорь Максимов05 жовтня 2024 р. 07:51
                                  Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                  d
                                  dblas505 липня 2024 р. 11:02
                                  QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                  Тепер обговоріть на форумі
                                  Evgenii Legotckoi
                                  Evgenii Legotckoi24 червня 2024 р. 15:11
                                  добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                  t
                                  tonypeachey115 листопада 2024 р. 06:04
                                  google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                  NSProject
                                  NSProject04 червня 2022 р. 03:49
                                  Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                                  9
                                  9Anonim25 жовтня 2024 р. 09:10
                                  Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                                  Слідкуйте за нами в соціальних мережах