powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запомнить логин - пароль
18 сообщений из 18, страница 1 из 1
Запомнить логин - пароль
    #38765673
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здраствуйте! Есть у меня программа. При открытии которой требуется авторизация(картинка ниже).
Хочется добавить к этой формочке чекбокс "Запомнить меня", чтобы при следующем открытии логин и пароль уже были введены.
Может кто такое делал? Подскажите как такое лучше реализовать.
Шифрование и дешифрование есть. Данные о пользователе хранятся в БД.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765679
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991, сохраняйте в конфиг (ну или любой другой xml-файл) в зашифрованном виде.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765697
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, у меня данные о пользователе уже сохраняются в зашифрованном виде в базе данных. Мне скорее нужно знать как хранить то, что пользователь при прошлом запуске программы поставил галочку "Запомнить меня", то данные о пользователе в поля я подтяну в поля логин-пароль
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765730
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991, хм... То есть без ввода логина и пароля программа сделает запрос к БД? Интересная схема :)

Ну если так можно, то добавьте в таблицу пользователей поле Autologin (True/False).
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765738
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, чтобы не изобретать велосипед, для этих целей используют виндовую аутентификацию.
Пользователь вошёл в Windows и ему больше не надо вводить логинов и паролей.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765742
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА вообще, чтобы не изобретать велосипед, для этих целей используют виндовую аутентификацию.
Пользователь вошёл в Windows и ему больше не надо вводить логинов и паролей.
Самое правильное.


С другой стороны, есть всяческие sql-membership-провайдеры, можно и их как-то заюзать... Правда сам не делал.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765748
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, программа отправит запрос в БД только если пользователь галочку "запомнить меня".
А что за виндовую аутентификацию?
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765764
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991программа отправит запрос в БД только если пользователь галочку "запомнить меня".От чьего имени программа отправит запрос в БД? Какой логин и пароль будет использоваться? Откуда они возьмутся, если Вы не хотите их хранить рядом в конфиге, аргументируя это тем, что они уже есть в БД?
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765771
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При удачном логине с галочкой "Запомнить меня" логин-пароль шифруется и сохраняется в конфиге. При перезапуске программа считывает логин-пароль из конфиг файла, пытается залогиниться, и, если не получается, показывает окно ввода логина-пароля.

Что не ясно?
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765788
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisПри удачном логине с галочкой "Запомнить меня" логин-пароль шифруется и сохраняется в конфиге. При перезапуске программа считывает логин-пароль из конфиг файла, пытается залогиниться, и, если не получается, показывает окно ввода логина-пароля.

Что не ясно?

Да ясно то все. Вопрос в том, что в таком виде что есть логин/пароль, что его нету. С другой стороны может и не требуется сохранить конфиденциальность?
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765946
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991, Isolated Storage или класс ProtectedData .

И, как уже правильно отметили, лучше использовать Windows аутентификацию. Но для этого потребуется переделка приложения. Возможно серьезная. На этот механизм следует закладываться с самого начала.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765968
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за советы. Сделал уже эту штуку. Храню данные в винде. При авторизации они сравниваются с данными в БД.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765972
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да почему серъёзная переделка?

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

Тогда алгоритм такой:

1. При старте приложения считываем ConnectionStringSettings;
2. Парсим при помощи SqlConnectionStringBuilder:
Код: c#
1.
var connectionStringBuilder = new SqlConnectionStringBuilder(connectionStringSettings.ConnectionString);


3. Если используется Windows аутентификация:
Код: c#
1.
if (connectionStringBuilder.IntegratedSecurity)

то пропускаем диалог логина;
4. Если логин уже задан:
Код: c#
1.
if (connectionStringBuilder.UserID != null)

то пропускаем диалог логина;
5. Если пользователь ввёл логин и пароль и отметил галочку "Запомнить меня", то собираем строку соединения и сохраняем:
Код: c#
1.
2.
3.
4.
5.
6.
7.
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection section = configuration.ConnectionStrings;

section.ConnectionStrings[connectionStringSettings.Name].ConnectionString = connectionString;
configuration.Save(ConfigurationSaveMode.Modified);

ConfigurationManager.RefreshSection(section.SectionInformation.Name);
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765976
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991Всем спасибо за советы. Сделал уже эту штуку. Храню данные в винде. При авторизации они сравниваются с данными в БД.А оставить пример кода потомкам? :)
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38765978
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДа почему серъёзная переделка?
Потому что кроме аутентификации могут быть еще права доступа завязаные на текущую систему хранения паролей.
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38766051
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Код: 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.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //создадим таймер, который будет закрывать приложение если
        //значение autoexit > 0
        private Timer t = new Timer();
        
        //Конструктор формы
        public Form1()
        {
            InitializeComponent();
            //создадим событие срабатывания таймера
            t.Tick += new EventHandler(t_Tick); 
        }
        //Функция срабатывания таймера
        private void t_Tick(object sender, EventArgs e)
        {
            //закрываем наше приложение
            Application.Exit();
        }

        //Переопределим выход из программы 
        //Занесем значения элементв с формы в объект Properties.Settings и сохраним настройки
        protected override void OnClosing(CancelEventArgs e)
        {
            Properties.Settings.Default.Title = this.textBox1.Text;
            Properties.Settings.Default.AutoExist = (int)this.numericUpDown1.Value;
            Properties.Settings.Default.BgColor = this.colorDialog1.Color;
            Properties.Settings.Default.Save();
        }
        
        //функция которая будет вызывать при загрузке приложения
        //юудет заполнять элементы на форме, а так же применять их значения
        private void LoadSettings()
        {
            this.textBox1.Text = Properties.Settings.Default.Title;
            this.numericUpDown1.Value = (decimal)Properties.Settings.Default.AutoExist;
            this.colorDialog1.Color = Properties.Settings.Default.BgColor;

            if (this.numericUpDown1.Value > 0)
            {
                //если значение autoexit > 0 то запускаем таймер
                t.Interval = (int)this.numericUpDown1.Value * 1000;
                t.Enabled = true;
            }
            this.BackColor = this.colorDialog1.Color;
            this.Text = this.textBox1.Text;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //вызываем функцию считывания настроек, после загрузки программы
            this.LoadSettings();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //открываем окно для выбора цвета
            colorDialog1.ShowDialog();
        }
    }
}
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38766056
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991,
ТОлько данные другие запоминаю. Самое важное тут это
Код: 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.
//функция которая будет вызывать при загрузке приложения
        //юудет заполнять элементы на форме, а так же применять их значения
        private void LoadSettings()
        {
            this.textBox1.Text = Properties.Settings.Default.Title;
            this.numericUpDown1.Value = (decimal)Properties.Settings.Default.AutoExist;
            this.colorDialog1.Color = Properties.Settings.Default.BgColor;

            if (this.numericUpDown1.Value > 0)
            {
                //если значение autoexit > 0 то запускаем таймер
                t.Interval = (int)this.numericUpDown1.Value * 1000;
                t.Enabled = true;
            }
            this.BackColor = this.colorDialog1.Color;
            this.Text = this.textBox1.Text;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //вызываем функцию считывания настроек, после загрузки программы
            this.LoadSettings();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //открываем окно для выбора цвета
            colorDialog1.ShowDialog();
        }
...
Рейтинг: 0 / 0
Запомнить логин - пароль
    #38766058
Denis1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis1991, а ну и в Settings добавить нужные переменные и их тип
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запомнить логин - пароль
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]