Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51

Форма авторизации - вне зависимости от выбранного пользака, открывается одна и та же форма

15.10.2019, 13:44. Показов 2991. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форма авторизации - вне зависимости от выбранного пользака, открывается одна и та же форма
Есть два пользака - главбух и ведущий бух
В комбобоксе выбирается один или второй, вводится соответствующий код, данные сравниваются с содержимым таблицы в БД
затем должна открываться соответствующая форма.
НО! Открывается одна и та же форма. Форма главбуха.
Да, формы разные и подписаны по-разному.

Код
C#
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace Kurs
{
    public partial class FormLogin : Form
    {
        public FormLogin()
        {
            InitializeComponent();
        }
 
        public bool GbuhAuth { get; private set; }
        public bool VbuhAuth { get; private set; }
        public static string login;
 
        private void FormLogin_Load(object sender, EventArgs e)
        {
            cbUser.Text = Properties.Settings.Default.loginValue;
            this.ActiveControl = tbPassword;
        }
 
        private void BtnLogin_Click(object sender, EventArgs e)
        {     
            using (SqlConnection sqlCon = new SqlConnection(CommonData.connString))
            {
                SqlDataAdapter sda = new SqlDataAdapter("Select FIO_user From Users where Name_user='" + cbUser.Text + "' and Pass_user = '" + tbPassword.Text + "' and Access_user = 1", CommonData.connString);
                SqlDataAdapter sda1 = new SqlDataAdapter("Select FIO_user From Users where Name_user='" + cbUser.Text + "' and Pass_user = '" + tbPassword.Text + "' and Access_user = 2", CommonData.connString);
                DataTable dt = new DataTable();
                DataTable dt2 = new DataTable();
                sda.Fill(dt);
                sda1.Fill(dt2);
                if (dt.Rows.Count > 0)
                {
                    login = dt.Rows[0][0].ToString();
                    this.GbuhAuth = true;
                    MessageBox.Show("Авторизация пройдена.");
                    this.Close();
                }
                else if (dt2.Rows.Count > 0)
                {
                    login = dt2.Rows[0][0].ToString();
                    this.VbuhAuth = true;
                    MessageBox.Show("Авторизация пройдена.");
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Неправильный логин/пароль.",
                                "Авторизация",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error,
                                MessageBoxDefaultButton.Button1,
                                MessageBoxOptions.DefaultDesktopOnly);
                }
            }
        }
 
        private void BtnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        private void About_Click(object sender, EventArgs e)
        {
            Form about = new About();
            about.ShowDialog();
        }
 
        private void FormLogin_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (cbRemember.Checked)
            {
                Properties.Settings.Default.loginValue = cbUser.Text;
                Properties.Settings.Default.Save();
            }
            else
            {
                Properties.Settings.Default.loginValue = "";
                Properties.Settings.Default.Save();
            }
        }
    }
}
Добавлено через 2 часа 1 минуту
Уже не актуально. Проблемы были в БД.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2019, 13:44
Ответы с готовыми решениями:

Форма авторизации и регистрации открывается до главной формы
Здравствуйте, делал форму авторизации по данному уроку Ссылка. Все работает отлично, но мне нужно, что бы из формы входа можно было открыть...

Ошибок нет, но при отладке после прохождения авторизации 2 форма не открывается
Запускаю отладку. Все запускается. Но после введения заданного логина и пароля(пользователь есть в сервере, я проверила) авторизация...

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

6
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
15.10.2019, 17:04
Цитата Сообщение от VoronReki Посмотреть сообщение
Pass_user = '" + tbPassword.Text
не храните пароли в не зашифрованном виде

И какой смысл пользователю выбирать свою роль в комбобоксе? Обычно права пользователя записываются в БД и при авторизации устанавливаются соответствующие разрешения
0
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
16.10.2019, 00:26  [ТС]
Цитата Сообщение от meridbt Посмотреть сообщение
И какой смысл пользователю выбирать свою роль в комбобоксе? Обычно права пользователя записываются в БД и при авторизации устанавливаются соответствующие разрешения
Может примерный код подскажите? Буду крайне благодарен...
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
16.10.2019, 09:13
VoronReki,

подскажу, но для начала скажите планируется ли исключительно внутреннее использование вашего приложения собственными бухгалтерами в защищённой сети или вы хотите его распространять?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
16.10.2019, 11:25
Пароль от БД лучше спрятать на бекэнде.

Общий принцип такой:


В примере используется БД MySQL, роль бекэнда играет php скрипт, принимающий в виде POST запроса логин и пароль, выполняющий проверку прав пользователя в БД и возвращающий права в виде json.

Клиент на C# отправляет POST запрос с параметрами login и password и получает в ответ доступные пользователю права или "-1" если авторизация не успешна, разбирает json в коллекцию, из которой может устанавливать необходимые разрешения внутри приложения.

Пример таблицы:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `users` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `flag` ENUM('on','off','delete') NOT NULL DEFAULT 'on',
    `login` VARCHAR(30) NOT NULL DEFAULT '',
    `password` VARCHAR(32) NOT NULL,
    `permissions` JSON NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `login` (`login`),
    INDEX `id` (`id`)
)
COLLATE='cp1251_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3
;


Скрипт авторизации:
Кликните здесь для просмотра всего текста
PHP
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
41
42
43
44
45
46
47
48
49
50
51
52
<?php
require_once('config/dbconfig.php');
 
if (isset($_POST['login']) && isset($_POST['password'])) {
    $auth = new AuthClass();
    echo($auth->auth($_POST['login'], $_POST['password']));
    unset($auth);
}
 
class AuthClass {
    public function auth($login, $password) {
        $db = new DBUTIL(); 
        $user = $db->get_User($login);
        unset($db);
        if (!isset($user) || md5($password) != $user->password)
        {           
            return -1; 
        }
        return $user->permissions;
    }
}
 
class DBUTIL {
    
    protected $HOST = DB_HOST;
    protected $USR = DB_LOGIN;
    protected $PWD = DB_PASSWORD;
    protected $PROD = DB_PROD;
    protected $LINK;
 
    function __construct() {
        $this->LINK = mysqli_connect($this->HOST, $this->USR, $this->PWD);
        if (  !$this->LINK  )   die("Error connecting to database");
        $this->LINK->set_charset('utf8');
    }
    
    function __destruct() {
        mysqli_close($this->LINK);
    }
            
    public function get_User($login) {      
        $query = <<<EOD
            SELECT * FROM sandbox.users u           
            WHERE u.login = '$login' AND u.flag = 'on'
EOD;
        $result = mysqli_query($this->LINK, $query);
        if (!$result) die(mysqli_error());
        $user = mysqli_fetch_object($result);
        return $user;
    }
}
?>


Клиент. Через менеджер пакетов NuGet подключите Newtonsoft.Json
Кликните здесь для просмотра всего текста
C#
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
 
namespace VoronReki
{
    class Program
    {
 
        static string username = "valera"; // { "valera", "anton" }
        static string password = "password";
 
        static void Main(string[] args)
        {
            string permissions = Login(username, password);
            if (permissions != "-1")
            {
                List<Permission> Permissions = JsonConvert.DeserializeObject<List<Permission>>(permissions);
                foreach(Permission permission in Permissions)
                {
                    Console.WriteLine($"User {username} has {permission.Role} rights in module {permission.Module}");
                }
                Console.WriteLine($"\nRaw permissions received from backend: \n{permissions}");
            }
            else Console.WriteLine("Wrong login or password");
            Console.ReadLine();
        }
 
        private static string Login(string login, string password)
        {
            WebRequest request = WebRequest.Create("http://meridbt.monstrik.com/VoronReki/login.php");
            request.Method = "POST";
            string data = $"login={login}&password={password}";
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(data);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
 
            using (Stream dataStream = request.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);
            }
 
            using (WebResponse response = request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }            
        }
    }
 
    class Permission
    {
        public string Role { get; set; }
        public string Module { get; set; }
    }
}


0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
16.10.2019, 12:45
PS Если доступ к серверу будет через публичную сеть и без SSL, то лучше на бекэнд передавать md5 хэш вместо самого пароля
0
0 / 0 / 0
Регистрация: 17.10.2018
Сообщений: 51
05.12.2019, 09:36  [ТС]
Во-первых, я тогда часть доделал, "накрыли" другие дела, в т.ч. по работе, так что смог вернуться к программе только сейчас.
Во-вторых. никакого публичного распространения. Это "костыль" исключительно для внутреннего пользования.

Добавлено через 1 минуту
meridbt, Во-первых, я тогда часть доделал, "накрыли" другие дела, в т.ч. по работе, так что смог вернуться к программе только сейчас. Во-вторых. никакого публичного распространения. Это "костыль" исключительно для внутреннего пользования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.12.2019, 09:36
Помогаю со студенческими работами здесь

Форма авторизации и форма Регистрации(Личный кабинет)
Здравствуйте! Подскажите мне пожалуйста, как мне сделать личный кабинет после авторизации, чтобы я мог зайти в свой профиль, как...

Логин страница в зависимости от которой открывается нужная форма (+MySql)
Здравствуйте. Задача в принципе описана в заголовке, по логину нужно определить к какому groupID относится login и исходя из этого открыть...

Как сделать GUI интерфейс с несколькими вкладками/закладками, т.е существует одна форма и в зависимости от выбора вкладк
как сделать GUI интерфейс с несколькими вкладками/закладками, т.е существует одна форма и в зависимости от выбора вкладки меняется...

Регистрационная форма и форма авторизации
Здравствуйте! Есть готовые файлы, которые работают как регистрационная форма на отдельном html-документы. Однако мне нужно связать их...

Добавление записи в Listview(1 форма) через Диалоговое окно(3 форма) другой формы (2 форма)
Всем доброго дня и с наступающими праздниками! Знаю, тема 7 частых вопросов по WinForms уже не раз обсуждалась, и была прочитана, но или...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru