dsRESTConnection组件不允许我在第一次连接后更改.username和.password

时间:2019-02-27 17:25:23

标签: rest delphi datasnap

在我的Delphi 10.3.1应用程序服务器(这是一个“ DataSnap REST应用程序”)中,我进行了一些记录,如下所示:

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;

在使用dsRestConnection的客户端(在Android上)中,我有一个测试连接的过程,例如在主窗体的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;

这很好。

当我调用第一个Server方法时,会出现问题。

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函数,验证仍从第一个(测试)连接接收用户名和密码。

这是设计使然吗?还是我错过了什么?谢谢。

0 个答案:

没有答案