问题描述
我使用 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 从客户端传输到服务器进行验证,这并不重要。