На моем сервере приложений Delphi 10.3.1 (который является «приложением REST DataSnap») я поместил некоторые записи в журнал следующим образом:
procedure TWebModule1.DSAuthenticationManager1UserAuthenticate(
Sender: TObject; const Protocol, Context, User, Password: string;
var valid: Boolean; UserRoles: TStrings);
begin
valid := (User > '') and (Password > ''); // pass-through
if Valid then
begin
MyWebUtils.LogMessage('Authentication, ' + User + ', ' + Password +
', ' + protocol + ', ' + context);
TDSSessionManager.GetThreadSession.PutData('USERNAME', User);
end;
end;
В моем клиенте (на Android), который используетdsRestConnection, у меня есть процедура для проверки соединения, которое я вызываю, например, в FormShow основной формы.
function TClientModuleRest.TestConnect(var ErrorMsg: String): Boolean;
var
returned: String;
begin
Result := True;
try
DSRestConnection.Username := 'Admin';
DSRestConnection.Password := 'Test';
DSRestConnection.TestConnection([toNoLoginPrompt]);
except
on e: exception do
begin
Result := False;
ErrorMsg := e.Message;
end
end;
end;
Это хорошо работает.
Проблема возникает, когда я вызываюПервый серверный метод.
function TClientModuleRest.ValidUser(username, password: String;
var Response: String): Integer;
var
Server: TServerMethodsRClient;
Valid: Boolean;
IniFile: TStringList;
FileName: TFileName;
begin
Result := 0;
DSRestConnection.UserName := username;
DSRestConnection.Password := password;
try
Server := TServerMethodsRClient.Create(DSRestConnection);
try
Valid := Server.ValidUser(username, password, Response);
if not Valid then
raise Exception.Create(response);
Result := 1;
finally
Server.Free;
end;
except
on e: exception do
begin
Response := e.Message;
Result := -1; // an error occured
end;
end;
end;
Таким образом, проблема в том, что настройка .username
и .password
не «принимает».Другими словами, я пришел к выводу, что .username
и `.password можно установить только до первого соединения , а не после него.
Файл журнала сервера показывает, что даже еслиБыла вызвана функция ValidUser со значениями имени пользователя и пароля, которые были переданы ей, аутентификация получает имя пользователя и пароль от первого (тестового) соединения.
Это от замысла?Или я что-то упустил?Спасибо.