Delphi:如何创建到使用 DelphiMVCFramework 创建的 RESTful 服务器的有状态连接?

问题描述

我使用 DelphiMVCFrameWork 3.2.1 为我的移动应用构建 RESTful 服务器。

为了获取数据,我总是使用基本身份验证。我每次都发送用户名和密码(例如):

procedure TDM.getGroupsFromServer;
var
 Http: TIdHTTP;
 ReqStr:string;
begin
 try
  Http := TIdHTTP.Create(nil);
  Http.ReadTimeout := 10000;
  Http.Request.ContentType := 'application/json';
  Http.Request.CharSet := 'utf-8';
  HTTP.Request.Accept:= '*/*';
  Http.Request.BasicAuthentication:= true;//<---------
  Http.Request.Username := DM.username;//<---------
  Http.Request.Password := DM.password;//<---------
  ReqStr:=Http.Get('http://'+SERVER_IP+':8080/api/groups');
  groupsJSON:=ReqStr;      
  dsGroups.LoadFromJSONArrayString(ReqStr);
  dsGroups.First;
 finally
  Http.Free;
 end;
end;

是否有任何登录方法,然后我执行我的请求,最后调用注销来终止连接?

提前致谢

解决方法

如果您不想在每个请求中都发送用户代码/密码,这是合法的,那么您必须发送一个 cookie。该 cookie(有时间限制)由服务器代码生成并存储在某处(数据库或内存中),将由具有用户代码/密码的第一个请求返回。

对于以后的请求,客户端将 cookie 与请求数据一起发送。服务器必须检查 cookie 并在 cookie 有效时授予访问权限。

当然,cookie 对于用户代码和原始 IP 必须是唯一的,以便所有请求都可以与给定计算机上的给定客户端相关联,以便进行检查以验证客户端是否具有该特定的访问权限请求。

根据框架功能(在您的情况下为 DelphiMVCFrameWork),cookie 可以是实际的 HTTP cookie,也可以只是一个数据字段。只要 cookie 从客户端传输到服务器进行验证,这并不重要。