Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
#1

Парольная аутентификация

01.10.2016, 15:36. Просмотров 1062. Ответов 27
Метки нет (Все метки)

Здравствуйте, разрабатываю приложение с разграничением учетных пользователей. Не получается сменять пароли при входе учетной записи. Пароль меняется во 2 учетной записи, не знаю как это исправить.
Вот код:
Delphi
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
unit WindowUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, Menus;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    BitBtn1: TBitBtn;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    SmenaClick: TMenuItem;
    NewUserClick: TMenuItem;
    AllUsersClick: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure SmenaClickClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  type
TUser = record
name:string[20]; // ëîãèГ*
password:string[20];   // ГЇГ*ðîëü
blocking:boolean;      // áëîêèðîâêГ*
password_rest:boolean;   // ГЇГ*ðîëüГ*îå îãðГ*Г*ГЁГ·ГҐГ*ГЁГҐ
end;
 
var
  Form1: TForm1;
   Users:array[1..50] of TUser;
  f:File of TUser;
  data:TUser;
    implementation
 
uses AuthorizationUnit, ChangePasswordUnit;
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
 
     begin
SmenaClick.Enabled:=false;
AllUsersClick.Enabled:=false;
NewUserClick.Enabled:=false;
AssignFile(f,'file.dat');
Rewrite(f);
Users[1].name := 'admin';
Users[1].password :='999';
 
Users[2].name := 'user';
Users[2].password :='888';
 
write(f,Users[1]);
write(f,Users[2]);
Closefile(f);
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form2.Show;
Form1.Hide;
end;
 
procedure TForm1.SmenaClickClick(Sender: TObject);
begin
Form3.Show;
Form1.Hide;
end;
 
end.
2-aя форма
Delphi
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
93
94
95
96
unit AuthorizationUnit;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
 
type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form2: TForm2;
n:integer=3; // количество попыток
k:integer;
implementation
 
uses WindowUnit;
 
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
begin
 
AssignFile(f,'file.dat');
reset(f);
k:=1;
while(not eof(f)) do begin
 
read(f, Users[k]);
k:=k+1;
 
end;
 
CloseFile(f);
if (edit1.Text = Users[1].name) and (edit2.Text = Users[1].password) then
begin
ShowMessage('Пароль введен правильно!'+#13#10+' - Добро пожаловать:-Администратор');
Form1.NewUserClick.Enabled:=true;
Form1.AllUsersClick.Enabled:=true;
Form1.SmenaClick.Enabled:=true;
Form1.Show;
edit1.Clear;
edit2.Clear;
Form2.Hide;
end
else
 
if (edit1.Text = Users[k-1].name) and (edit2.Text = Users[k-1].password) then
begin
ShowMessage('Пароль введен правильно!'+#13#10+' - Добро пожаловать: Пользователь');
Form1.NewUserClick.Enabled:=false;
Form1.AllUsersClick.Enabled:=false;
Form1.SmenaClick.Enabled:=true;
Form1.Show;
edit1.Clear;
edit2.Clear;
Form2.Hide;
end
else
if (edit1.text='') then
begin
ShowMessage('Заполните требуемые поля');
end
else
begin
if (edit1.text<>Users[k].name) and (edit2.text<>Users[k].password) or (edit1.text = Users[k].name) or(edit2.Text = Users[k].password) then
begin
n:=n-1;
ShowMessage('Проверьте правильность введенных данных.Осталось '+inttostr(n) +' попытки');
edit1.Clear;
edit2.Clear;
if n<=0 then
begin
showmessage('Вы истратили все попытки. Программа закрывается');
form2.Close;
halt;
end ;
end;
end;
 
end;
 
end.
3-ая форма:
Delphi
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
unit ChangePasswordUnit;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
 
type
TForm3 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form3: TForm3;
k:integer;
j:integer;
implementation
 
uses WindowUnit;
 
{$R *.dfm}
 
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
assignFile(f,'file.dat');
reset(f);
k:=1;
while(not eof(f)) do begin
read(f,Users[k]);
k:=k+1;
end;
Closefile(f);
if (edit1.Text = Users[k-1].password) or (edit1.Text = Users[1].password) then
ShowMessage('Пароль верный')
else begin
ShowMessage('Пароль неверный!');
edit1.Clear;
end;
end;
 
procedure TForm3.BitBtn2Click(Sender: TObject);
begin
AssignFile(f,'file.dat');
reset(f);
k:=1;
while(not eof(f)) do begin
read(f,Users[k]);
k:=k+1;
 
end;
seek(f,filesize(f)-1);
 
Users[k-1].password:=edit2.Text;
write(f,Users[k-1]);
Closefile(f);
if (edit2.Text = edit3.Text) then
ShowMessage('Пароли совпадают!')
else begin
ShowMessage('Пароли не совпадают!');
edit2.clear;
edit3.Clear;
end; end;
 
 
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
Form3.Hide;
end;
 
end.
Вот сам проект файла с заданием формата pdf
0
Вложения
Тип файла: rar Лаб.работа по защите.rar (1.23 Мб, 14 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2016, 15:36
Ответы с готовыми решениями:

Лабораторная "Парольная аутентификация" - Delphi
Программа должна обеспечивать работу в двух режимах: администратора...

Лабораторная "Парольная аутентификация"
Содержание задания Программа должна обеспечивать работу в двух режимах:...

Аутентификация
Привет Хочу сделать формы с входом. Те есть будут 3 роли: админ, продавец,...

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

Базовая аутентификация по idhttp
Перерыл уже весь google нашел миллион примеров, как только не пробовал серавно...

27
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
05.10.2016, 14:34  [ТС] #21
MyEternity, можете помочь написать это приложение, так как я запутался.
0
TimKruz
141 / 39 / 14
Регистрация: 16.06.2016
Сообщений: 239
05.10.2016, 15:32 #22
vladis23, да тебе всё уже написали - примеры привели - тебе остаётся прочитать код и перестроить его под свою задачу.
0
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
05.10.2016, 15:57  [ТС] #23
TimKruz, как сделать проверку уникального имени пользователя и как еще дозаписывать в файл? Если я не ошибаюсь то ставиться seek(f,filesize(f-1)) вроде так дозаписывается файл
0
TimKruz
141 / 39 / 14
Регистрация: 16.06.2016
Сообщений: 239
05.10.2016, 16:15 #24
Цитата Сообщение от vladis23 Посмотреть сообщение
как сделать проверку уникального имени пользователя
Delphi
1
2
3
4
5
6
7
8
9
10
11
function TUserControl.CheckUniqueName(Name: String): Boolean;
var
  U: TUser;
begin
  Result := true;
  // Перебираем все записи, используя U как курсор
  for U in UserControl.User do // Про UserControl см. мой предыдущий код
    if Name = U.Name then
      // Если встретили то же самое имя - значит, оно не уникально, выходим
      Exit(false);
end;
Цитата Сообщение от vladis23 Посмотреть сообщение
и как еще дозаписывать в файл? Если я не ошибаюсь то ставиться seek(f,filesize(f-1)) вроде так дозаписывается файл
Правильно, только не f-1, а просто f.
Delphi
1
2
3
4
5
AssignFile(f, 'file.dat');
Reset(f);
Seek(f, FileSize(f));
Write(f, Data);
CloseFile(f);
0
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
05.10.2016, 17:50  [ТС] #25
TimKruz, а как произвести удаление пользователя, чтоб при этом все записи не стирались?
0
TimKruz
141 / 39 / 14
Регистрация: 16.06.2016
Сообщений: 239
05.10.2016, 18:01 #26
Работать с БД, если она небольшая, нужно в оперативной памяти. Т.е. загрузили БД, удалили запись и т.п., перед выходом перезаписали БД в файл.
С большой БД, которая не помещается в памяти, придётся выкручиваться с Seek() и сдвигом последних записей на место удалённой.
Можно не сдвигать все записи БД после каждого удаления, а помечать записи, которые требуется удалить, специальным флажком (дополнительная переменная типа Boolean в записи TUser), а реально удалять только иногда. Так будет намного быстрее.
0
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
06.10.2016, 22:34  [ТС] #27
Цитата Сообщение от TimKruz Посмотреть сообщение
for U in User do
Что это за цикл такой ? В делфи такого нет объявления цикла

Добавлено через 1 час 46 минут
TimKruz, Я начал писать приложение, но ваши примеры так и не помогли ничем. Я не понимаю как эти методы применять в других модулях
0
TimKruz
141 / 39 / 14
Регистрация: 16.06.2016
Сообщений: 239
07.10.2016, 15:43 #28
Цитата Сообщение от vladis23 Посмотреть сообщение
Что это за цикл такой ? В делфи такого нет объявления цикла
Эта конструкция появилась в Delphi 2005. Это компактный эквивалент следующей конструкции:
Delphi
1
2
3
4
5
for I := Low(User) to High(User) do
begin
  U := User[I];
  // делаем что-то с U
end;
Цитата Сообщение от vladis23 Посмотреть сообщение
TimKruz, Я начал писать приложение, но ваши примеры так и не помогли ничем. Я не понимаю как эти методы применять в других модулях
Пиши конкретнее. Никто не может вложить тебе в голову полное решение задачи - можно дать только наводящие подсказки.

Возможно, перед тем, как решать такие задачи, тебе нужно почитать книги о Delphi и начать с чего-то простого.
0
07.10.2016, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2016, 15:43

Идентификация и аутентификация в делфи
Помогите с написанием программы! Идентификация и аутентификация пользователя на...

Парольная защита формы
Народ, подскажите, как можно изящно и несложно реализовать запрос пароля при...

Парольная защита Windows
Приветствую всех! Решил рассмотреть механизм парольной защиты Windows. Пока не...


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

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

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