Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
1

Аутентификация при входе в систему

03.10.2017, 11:13. Показов 1522. Ответов 22
Метки нет (Все метки)

Всем привет! Как сделать так, чтобы перед открытием основного окна пользователь сначала осуществил вход.
Ввел логин и пароль.

Добавлено через 36 секунд
Логин и пароль должны быть статическими. Переменными в программе.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2017, 11:13
Ответы с готовыми решениями:

Скрипт при входе в систему
Здравствуйте, с наступившим вас!! :drink: Такие дела, захожу на сервер через RDP под админом,...

Сообщение при входе в систему
У меня в работе проблемы при входе в систему. У нас доменный сеть, вся инфраструктура сети было...

Мелодия при входе в систему
Всем привет. Мне нужно знать, где находится мелодия(папка) при входе в Windows, когда вводишь...

Ошибка при входе в систему
после того как установила антивирус и перезагрузила компьютер появилось окно: Ошибка при...

22
зомбяк
1509 / 1160 / 326
Регистрация: 14.05.2017
Сообщений: 3,754
03.10.2017, 11:22 2
Цитата Сообщение от Kotik_leapold Посмотреть сообщение
Логин и пароль должны быть статическими. Переменными в программе.
если статическими, то с помощью редакторов памяти их элементарно найти и заменить.
0
15 / 15 / 8
Регистрация: 01.10.2017
Сообщений: 97
03.10.2017, 11:25 3
посмотри в сторону QSplashScreen.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 876
08.10.2017, 21:30 4
создавай свой Qdialog и вызывай его в конструкторе mainwindow
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
09.10.2017, 10:51  [ТС] 5
Всем привет! Вот реализовал аунтефикацию, но код рушится.

В main.cpp я создаю LoginDialog и MainWindow

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "ui/main/MainWindow.hpp"
#include "ui/login/LoginDialog.hpp"
 
int main(int argc, char *argv[]) {
    QApplication application(argc, argv);
 
    MainWindow mainWindow;
    LoginDialog loginDialog;
 
    mainWindow.hide();
 
    loginDialog.exec();
 
    return application.exec();
}
Добавлено через 5 минут
Запускаю диалог. Диалог показывается.
Нужно ввести логин пароль и после этого открывается главное окно.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <QMainWindow>
#include <QBoxLayout>
 
 
class Event;
 
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    enum Pages {
        START_PAGE,
        LOG_PAGE,
        SETTING_PAGE
    };
 
    MainWindow(QWidget *parent = 0);
    MainWindow(const MainWindow&) = delete;
    MainWindow& operator=(const MainWindow&) = delete;
    ~MainWindow();
 
    void runThreads();
 
private:
    void closeEvent(QCloseEvent* event) override;
 
    void initTabs();
    void initStartPage();
    void initLogFilePage();
    void initSettingsPage();
 
    QBoxLayout* mainLayout;
    QWidget* mainWidget;
 
    QTabWidget* tabs;
 
    Event* event;
};
Добавлено через 2 минуты
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "MainWindow.hpp"
 
#define TAG "[MW-TAG] "
#define qcout qDebug()
 
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
                                          event(new Event(this)) {
    setObjectName("main-window");
   
    /** TODO: hide from taskbar
        setWindowFlags(Qt::SplashScreen | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
     */
 
    setWindowIcon(QIcon(":image/uhc_icon.png"));
 
    mainWidget = new QWidget;
 
    initTabs();
 
    mainLayout = new QHBoxLayout;
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
 
    mainLayout->addWidget(tabs);
 
    mainWidget->setLayout(mainLayout);
    setCentralWidget(mainWidget);
 
    resize(700, 500);
}
 
MainWindow::~MainWindow() {
    delete event;
}
Добавлено через 3 минуты
Логин диалог

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "event/login/LoginEvent.hpp"
 
class LoginEvent;
 
class LoginDialog : public QDialog {
    Q_OBJECT
public:
    explicit LoginDialog(QWidget* parent = nullptr);
    ~LoginDialog();
 
    
private:
    void setUpGUI();
 
    void setupTopRegion();
    void setupBottomRegion();
 
    QBoxLayout* mainLayout;
 
    QLabel* avatar;
    QLabel* userNameLabel;
    QLabel* passwordLabel;
 
    QLineEdit* userNameEdit;
    QLineEdit* passwordEdit;
 
    QCheckBox* changeModeCheckBox;
 
    QDialogButtonBox* buttons;
 
    LoginEvent* event;
};

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
LoginDialog::LoginDialog(QWidget* parent) : QDialog(parent),
                                            event(new LoginEvent(this)) {
    setWindowTitle(tr("User Login"));
    setObjectName("login-window");
 
    setWindowFlags(Qt::Window | Qt::WindowSystemMenuHint);
 
    setWindowIcon(QIcon(":image/login/login.png"));
 
    setUpGUI();
 
    resize(300, 300);
}
 
void LoginDialog::setupBottomRegion() {
    changeModeCheckBox = new QCheckBox(tr("Сховати текст"));
    changeModeCheckBox->setChecked(true);
 
    buttons = new QDialogButtonBox;
    buttons->addButton(QDialogButtonBox::Ok);
    buttons->addButton(QDialogButtonBox::Cancel);
 
    buttons->button(QDialogButtonBox::Ok)->setText(tr(" Війти "));
    buttons->button(QDialogButtonBox::Cancel)->setText(tr("Відмова"));
 
    QObject::connect(buttons->button(QDialogButtonBox::Cancel), SIGNAL(clicked()),
                     qApp, SLOT(quit()));
 
    QObject::connect(buttons->button(QDialogButtonBox::Ok), SIGNAL(clicked()),
                     event, SLOT(successLoad()));
 
    QObject::connect(changeModeCheckBox, SIGNAL(toggled(bool)),
                     event, SLOT(changeMode(bool)));
}
 
LoginDialog::~LoginDialog() {
    delete event;
}
Добавлено через 2 минуты
Если нажата клавиша "OK", то вызывается слот successLoad()

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SLOT_DEFINE
void LoginEvent::successLoad() {
    QString name = loginDialog->getUserName();
    QString password = loginDialog->getPassword();
 
    mainDialog = static_cast<MainWindow*>(UITool::getInstance().getMainWindow());
 
    if (name == storeName && password == storePassword) {
        loginDialog->hide();
 
        mainDialog->show();
        mainDialog->runThreads();
    } else {
        loginDialog->setUserName("");
        loginDialog->setPassword("");
 
    }
}
Добавлено через 2 минуты
Сразу все работает, но потом выбивает ошибку, все крушится

Bash
1
2
3
4
5
6
7
ASSERT failure in QCoreApplication::sendEvent: 
"Cannot send events to objects owned by a different thread. 
Current thread 1b969d08. Receiver 'main-window' (of type 'MainWindow')
 was created in thread 1814bfb0", file kernel\qcoreapplication.cpp, line 541
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
QObject::~QObject: Timers cannot be stopped from another thread
Добавлено через 1 минуту
Как можно эту ошибку решить.
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
09.10.2017, 11:38  [ТС] 6
Вот такое окно открывается
0
Миниатюры
Аутентификация при входе в систему  
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 243
10.10.2017, 09:55 7
Так попробуй.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "ui/main/MainWindow.hpp"
#include "ui/login/LoginDialog.hpp"
 
int main(int argc, char *argv[]) {
    QApplication application(argc, argv); 
    LoginDialog loginDialog; 
    loginDialog.exec();
   MainWindow mainWindow;
    mainWindow.hide();
     return application.exec();
}
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
10.10.2017, 20:11  [ТС] 8
Но так тоже рушится. Я так понимаю не правильно потоки работают. Но как правильно потоки назначить.
0
6989 / 6028 / 2737
Регистрация: 14.04.2014
Сообщений: 25,792
10.10.2017, 22:47 9
Используй одно окно. Скроешь всё лишнее при старте.
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
11.10.2017, 09:20  [ТС] 10
Значит это

Bash
1
Используй одно окно. Скроешь всё лишнее при старте.
Можете показать на примере.

Добавлено через 24 минуты
Если использовать подход который предлагает trdm

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(int argc, char *argv[]) {
    QApplication application(argc, argv);
 
    loadStyle(application);
 
    ConfigUtil::getInstance().load();
 
    LoginDialog loginDialog;
 
    if (loginDialog.exec() == QDialog::Rejected) {
        qcout << "Login dialog are closed!" << endl;
    }
 
    MainWindow mainWindow;
    mainWindow.hide();
 
    return application.exec();
}
то в момент когда будет вызван слот

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SLOT_DEFINE
void LoginEvent::successLoad() {
    QString name = loginDialog->getUserName();
    QString password = loginDialog->getPassword();
 
    mainDialog = static_cast<MainWindow*>(UITool::getInstance().getMainWindow());            // mainDialog = nullptr
 
    if (name == storeName && password == storePassword) {
        loginDialog->hide();
 
        mainDialog->show();
        mainDialog->runThreads();
    } else {
        loginDialog->setUserName("");
        loginDialog->setPassword("");
 
    }
}
объект MainWindow еще не будет создан
0
6989 / 6028 / 2737
Регистрация: 14.04.2014
Сообщений: 25,792
11.10.2017, 09:22 11
Какой пример нужен? В главном окне скрой всё кроме полей ввода имени и пароля, а когда правильно введут, скроешь поля, а остальное покажешь. Или просто сделай всё disabled и сразу же выводи диалог ввода пароля поверх главного окна.
0
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 243
11.10.2017, 13:06 12
Я так запускаюсь:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int main(int argc, char *argv[])
{
    uoStartUpSet* startOpt = uoStartUpSet::instance();
    if (startOpt) {
        startOpt->writeToLog("start");
        bool res = startOpt->parseCmdLine(argc, argv);
        if (!res) {
            startOpt->writeToLog("unNStudio end<< missing startup.....");
            return(0);
        }
    } else {
        return(0);
    }
 
    InitCodecs();
    Q_INIT_RESOURCE(unNStudio);
    Q_INIT_RESOURCE(unNStudioCnf);
 
    uoStudioApp app(argc, argv);
    if (startOpt->isUnknownMode()) {
        uoGUI::uoStartupDlgImpl* startDlg = new uoGUI::uoStartupDlgImpl();
        startDlg->setModal(true);
        if (QDialog::Accepted == startDlg->exec()) {
            startOpt->setStartupMode(startDlg->getStartupMode());
            startOpt->setDbPath(startDlg->getDbPath());
            startOpt->setDbName(startDlg->getDbName());
        } else {
            return(1);
        }
    }
 
    if (startOpt->isConfigMode()) {
        if (!startOpt->makeTempMetaData())
            return(0);
        uoConfigMainWnd mainWin;
        mainWin.show();
        return app.exec();
    }
    return(0);
}
использую указатели.
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
11.10.2017, 15:10  [ТС] 13
А можете разяснить, как этот код работает. Не до конца понятно.
0
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 243
11.10.2017, 19:42 14
Цитата Сообщение от Kotik_leapold Посмотреть сообщение
А можете разяснить, как этот код работает. Не до конца понятно.
что не понятно?
0
Заблокирован
11.10.2017, 20:24 15
Непонятно, с чем вообще тут могут быть проблемы. Сначала отображаешь одно окно, окно аутентификации, затем, в случае успешного её прохода - отображаешь основное окно. Окон может быть сколько угодно. Правда подобную защиту со статическими паролями, вшитыми в бинарь, взломает любой студент с помощью интерактивного дизассемблера, что и было подмечено в этом треде ранее.
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
12.10.2017, 12:09  [ТС] 16
Я храню пароль и логин в бинарном шифрованном файле.
Но все равно код ломается.
0
Заблокирован
12.10.2017, 12:51 17
Цитата Сообщение от Kotik_leapold Посмотреть сообщение
Я храню пароль и логин в бинарном шифрованном файле.
Ну ты же понимаешь, что где бы ты его не хранил, хакер поставит брейкопоинт на твоём окне ввода пароля и скопирует байты, которые ту туда вводишь. Всё, теперь он делает пач, которые эти байты автоматов подставляет по нужному адресу и твоё окно вообще убирает. Вуаля
0
6989 / 6028 / 2737
Регистрация: 14.04.2014
Сообщений: 25,792
12.10.2017, 12:54 18
newbie_1, да ему бы с окнами разобраться.
0
108 / 95 / 84
Регистрация: 18.12.2015
Сообщений: 567
12.10.2017, 15:31  [ТС] 19
Что вы предлагаете в качестве подхода для сохранения паролей пользователя?
В каком виде хранить пароли?
0
Заблокирован
12.10.2017, 15:39 20
Цитата Сообщение от Kotik_leapold Посмотреть сообщение
Что вы предлагаете в качестве подхода для сохранения паролей пользователя?
В каком виде хранить пароли?
Нужно делать клиент-серверный софт и пароль проверять не сервере. Любой оффлайн бинарь взломают, как бы его не защищал - это просто вопрос времени и необходимости.
По поводу окошек... Ну делал бы всё на QML и горя бы не знал
Всё зависит от софта...Можно пароль каждый раз менять и передавать его клиенту по телефону Что за софт то?
Лучшая защита системы - по периметру, то есть отключение от интернета и ограничение физического доступа к компу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2017, 15:39

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Английская раскладка при входе в систему
Можно ли в Windows 7 для удобства пользователей по умолчанию для входа в систему установить...

Автоматическое фото при входе в систему
Всем привет. Помогите, кто знает. Хочу, чтобы ноутбук делал фото на вебку при разблокировке...

Неполадки монитором при входе в систему
При входе в систему монитор выключается, вход возможен только при enabled vga mode. После загрузки...

Черный экран при входе в систему
Что Делать! При Входе В Систему Проходит Окно Приветствия, А Дальше Черный Экран С Курсором! Можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.