(테스트) 최초 로그인 시 패스워드 변경 기능 추가
This commit is contained in:
parent
c5e7193959
commit
c1298c22c1
|
|
@ -20,6 +20,7 @@ type
|
||||||
EditID, EditPW: TEdit;
|
EditID, EditPW: TEdit;
|
||||||
ButtonLogin: TButton;
|
ButtonLogin: TButton;
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
|
procedure FromClose(Sender: TObject; var Action: TCloseAction);
|
||||||
procedure ButtonLoginClick(Sender: TObject);
|
procedure ButtonLoginClick(Sender: TObject);
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
@ -47,6 +48,12 @@ begin
|
||||||
Self.FormStyle := fsStayOnTop;
|
Self.FormStyle := fsStayOnTop;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TAuthForm.FromClose(Sender: TObject; var Action: TCloseAction);
|
||||||
|
begin
|
||||||
|
// 폼이 닫힐 때 메모리에서 자동으로 제거되도록 설정
|
||||||
|
Action := caFree;
|
||||||
|
end;
|
||||||
|
|
||||||
function IsValidInput(const AText: string): Boolean;
|
function IsValidInput(const AText: string): Boolean;
|
||||||
const
|
const
|
||||||
// 영문, 숫자, 특수문자만 허용
|
// 영문, 숫자, 특수문자만 허용
|
||||||
|
|
@ -98,10 +105,13 @@ begin
|
||||||
Guard(ss, TStringStream.Create(sData, TEncoding.UTF8));
|
Guard(ss, TStringStream.Create(sData, TEncoding.UTF8));
|
||||||
Result := HTTP.Post(sDestIPort + sUrl, ss);
|
Result := HTTP.Post(sDestIPort + sUrl, ss);
|
||||||
except
|
except
|
||||||
|
on E: EIdHTTPProtocolException do
|
||||||
|
begin
|
||||||
|
Result := E.ErrorMessage;
|
||||||
|
end;
|
||||||
on E: Exception do
|
on E: Exception do
|
||||||
begin
|
begin
|
||||||
//ShowMessage('HTTP 통신 내부 오류: ' + E.Message);
|
Result := 'Error: ' + E.Message;
|
||||||
Result := '';
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
@ -121,7 +131,7 @@ begin
|
||||||
// 차단 시작 시간으로부터 5분이 지났는지 확인
|
// 차단 시작 시간으로부터 5분이 지났는지 확인
|
||||||
if (CurrentTime - BlockStartTime) < (5 / (24 * 60)) then
|
if (CurrentTime - BlockStartTime) < (5 / (24 * 60)) then
|
||||||
begin
|
begin
|
||||||
MessageBox(0,'로그인 5회 실패로 인해 5분간 로그인이 차단됩니다', 'BSOne Login', MB_ICONINFORMATION);
|
MessageBox(0,'로그인 5회 실패로 인해 5분간 로그인이 차단됩니다', 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
Exit;
|
Exit;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
@ -133,27 +143,27 @@ begin
|
||||||
|
|
||||||
if EditID.Text = '' then
|
if EditID.Text = '' then
|
||||||
begin
|
begin
|
||||||
MessageBox(0,'ID를 입력하세요', 'BSOne Login', MB_ICONINFORMATION);
|
MessageBox(0,'ID를 입력하세요', 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
EditID.SetFocus;
|
EditID.SetFocus;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if not IsValidInput(EditID.Text) then
|
if not IsValidInput(EditID.Text) then
|
||||||
begin
|
begin
|
||||||
MessageBox(0,'ID에는 영문, 숫자, 특수기호를 제외하고 들어갈 수 없습니다', 'BSOne Login', MB_ICONINFORMATION);
|
MessageBox(0,'ID에는 영문, 숫자, 특수기호를 제외하고 들어갈 수 없습니다', 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if EditPW.Text = '' then
|
if EditPW.Text = '' then
|
||||||
begin
|
begin
|
||||||
MessageBox(0,'패스워드를 입력하세요', 'BSOne Login', MB_ICONINFORMATION);
|
MessageBox(0,'패스워드를 입력하세요', 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
EditPW.SetFocus;
|
EditPW.SetFocus;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if not IsValidInput(EditPW.Text) then
|
if not IsValidInput(EditPW.Text) then
|
||||||
begin
|
begin
|
||||||
MessageBox(0,'패스워드에는 영문, 숫자, 특수기호를 제외하고 들어갈 수 없습니다', 'BSOne Login', MB_ICONINFORMATION);
|
MessageBox(0,'패스워드에는 영문, 숫자, 특수기호를 제외하고 들어갈 수 없습니다', 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -167,12 +177,50 @@ begin
|
||||||
O.S['agentId'] := sAgentId;
|
O.S['agentId'] := sAgentId;
|
||||||
|
|
||||||
sResult := GetPostData(sDestIPort, 'aapi/auth/refresh-token/issue', O.AsJSon);
|
sResult := GetPostData(sDestIPort, 'aapi/auth/refresh-token/issue', O.AsJSon);
|
||||||
|
//showmessage(sResult);
|
||||||
if sResult <> '' then
|
if sResult <> '' then
|
||||||
begin
|
begin
|
||||||
if sResult.Contains('error') then
|
// 일반 예외(Exception)
|
||||||
|
if sResult.Contains('Error') then
|
||||||
begin
|
begin
|
||||||
//_Trace('Error .. GetRegPerInfoUrl() .. Msg="%s"', [Result]);
|
//_Trace('Error .. GetPostData() .. Msg="%s"', [Result]);
|
||||||
ShowMessage('에러 1: '+ sResult);
|
MessageBox(0, LPCWSTR(sResult), 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
|
exit;
|
||||||
|
end
|
||||||
|
// 프로토콜 예외(EIdHTTPProtocolException)
|
||||||
|
else if sResult.Contains('err') then
|
||||||
|
begin
|
||||||
|
O := SO(sResult);
|
||||||
|
sResult := O.S['err'];
|
||||||
|
MessageBox(0, LPCWSTR('Error: ' + sResult), 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
|
|
||||||
|
Inc(iFailCount);
|
||||||
|
|
||||||
|
if iFailCount >= 5 then
|
||||||
|
begin
|
||||||
|
BlockStartTime := Now; // 현재 시간 기록
|
||||||
|
MessageBox(0, '인증 실패 5회 연속으로 5분간 로그인이 차단됩니다.', 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
|
exit;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
MessageBox(0, PChar(format('아이디 또는 비밀번호가 일치하지 않습니다' + sLineBreak +
|
||||||
|
'(현재 %d회 실패 / 5회 연속실패 시 차단)', [iFailCount])), 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
|
end;
|
||||||
|
exit;
|
||||||
|
end
|
||||||
|
else if sResult.Contains('passwordChange') then
|
||||||
|
begin
|
||||||
|
O := SO(sResult);
|
||||||
|
sResult := O.S['passwordChangeRequired'];
|
||||||
|
if sResult = 'true' then
|
||||||
|
begin
|
||||||
|
var sUrl := O.S['passwordChangeUrl'];
|
||||||
|
showmessage(sUrl);
|
||||||
|
sResult := GetPostData(sDestIPort, sUrl, O.AsJSon);
|
||||||
|
end;
|
||||||
|
|
||||||
|
MessageBox(0, LPCWSTR(sResult), 'BSOne Login', MB_ICONINFORMATION or MB_TOPMOST or MB_SETFOREGROUND);
|
||||||
exit;
|
exit;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
@ -185,24 +233,12 @@ begin
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
Inc(iFailCount);
|
|
||||||
|
|
||||||
if iFailCount >= 5 then
|
|
||||||
begin
|
|
||||||
BlockStartTime := Now; // 현재 시간 기록
|
|
||||||
ShowMessage('인증 실패 5회 연속으로 5분간 로그인이 차단됩니다.');
|
|
||||||
exit;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
ShowMessage(Format('아이디 또는 비밀번호가 일치하지 않습니다. (현재 %d회 실패 / 5회 연속실패 시 차단)', [iFailCount]));
|
|
||||||
end;
|
|
||||||
exit;
|
|
||||||
end;
|
end;
|
||||||
except
|
except
|
||||||
on E: Exception do
|
on E: Exception do
|
||||||
begin
|
begin
|
||||||
ShowMessage('오류 발생: Fail .. GetRegPerInfoUrl()' + sLineBreak + E.Message);
|
ShowMessage('오류 발생: Fail .. GetPostData()' + sLineBreak + E.Message);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
@ -240,7 +276,7 @@ begin
|
||||||
|
|
||||||
if Assigned(FOnSuccess) then
|
if Assigned(FOnSuccess) then
|
||||||
FOnSuccess(Self, CODE_AUTH_OK); // 메인 서비스에 알림 발송
|
FOnSuccess(Self, CODE_AUTH_OK); // 메인 서비스에 알림 발송
|
||||||
Close; // 창 닫기
|
Close;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue