这段程序中没有看到做用户名和密码验证的方法,那个checkLogin也只是一个赋值的方法。。

解决方案 »

  1.   

    这个代码确实很莫名其妙,判断是否登录是这样判断:
    oADSI := GetObject(C_WINNT_ROOT);
    oIIS := oADSI.OpenDSObject(C_WINNT_ROOT + '//' + DomainName, sUser, sPassword, 0);
    这个判断我总觉得似乎不靠谱。
    不知道大家是否有其他判断域登录的方式?
      

  2.   

    这个代码确实很莫名其妙,判断是否登录是这样判断:
    oADSI := GetObject(C_WINNT_ROOT);
    oIIS := oADSI.OpenDSObject(C_WINNT_ROOT + '//' + DomainName, sUser, sPassword, 0);
    这个判断我总觉得似乎不靠谱。
    不知道大家是否有其他判断域登录的方式?
    楼上的,你也是搞delphi的吗?求指点啊,刚入门。。
      

  3.   

    顶上去
    目前的解决方案是用Windows自带功能LogonUserA,但是发现了一个问题:该功能只能通过本机进行验证,而无法指定域服务器进行验证。
    不知道有其他解决办法么?
      

  4.   

    顶上去。
    目前考虑用IIS的集成WINDOWS验证功能,做一个网页,Delphi发送用户名和密码去验证,获取验证结果。
    但是查不到Indy如何登录集成Windows验证的网页的资料。不知道哪位大侠可以提供?谢谢!
      

  5.   


    oIIS := oADSI.OpenDSObject(C_WINNT_ROOT + '//' + DomainName, sUser, sPassword, 0);
    改成
    oIIS := oADSI.OpenDSObject(C_WINNT_ROOT + '//' + DomainName, UserName, sPassword, 0);
    测试成功!另外使用LDAP速度更快:
    function TADLogin.GetCanLogin2: Boolean;
    const
      C_WINNT_ROOT = 'LDAP:';
    var
      oADSI, oIIS: Variant;
      sUser, sPassword: string;
    begin
      Result := inherited GetCanLogin;
      try
        sUser := DomainName + '\' + UserName;
        sPassword := UserPassword;
        oADSI := GetObject(C_WINNT_ROOT);
        oIIS := oADSI.OpenDSObject(C_WINNT_ROOT + '//' + DomainName, UserName, sPassword, 0);
        Result := True;
      except
        on E: Exception do
        begin
          FErrorMsg := E.Message;
        end;
      end;
    end;