Компонент dsRESTConnection не позволит мне изменить .username и .password после первого подключения - PullRequest
0 голосов
/ 27 февраля 2019

На моем сервере приложений 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 со значениями имени пользователя и пароля, которые были переданы ей, аутентификация получает имя пользователя и пароль от первого (тестового) соединения.

Это от замысла?Или я что-то упустил?Спасибо.

...