在使用websnap技术时如何通过后端的数据库使用websnap提供的3个控件进行身份验证呢?

解决方案 »

  1.   

    TWebUserList 中添加用户、口令、权限
      

  2.   

    在远程数据库中有几百条这样的用户,难道要一条条读取然后在加入TWebUserList吗。
    能否做道到某个人访问就加某个人,
    还是有很多不解之处。
      

  3.   

    如果不这样做,则要你自己来处理身份验证。
    有几个事件的,如 BeforeValidateUserName,BeforeValidatePassword,OnLogin 等,自己查一下.
      

  4.   

    procedure Thome.WebUserListBeforeValidateUser(Strings: TStrings;
      var UserID: Variant; var Handled: Boolean);
    var UserItem:TWebUserItem;
        k:integer;
    begin
         wdm.ADOSp.Close;
         wdm.ADOSp.Parameters.Clear;
         wdm.ADOSp.ProcedureName := 'userverify';
         wdm.ADOSp.Parameters.CreateParameter('username', ftString, pdInput, 8, strings.Values['username']);
         wdm.ADOSp.Parameters.CreateParameter('userpwd', ftString, pdInput, 10, strings.Values['password']);
         wdm.ADOSp.OPEN;
         k:=wdm.ADOSp.RecordCount;
        {wdm.adq.sql.close;
        wdm.adq.sql.clear;
        wdm.adq.sql.add('select username,usercat,userpassword,City');
        wdm.adq.sql.add(' from usertbl ');
        wdm.adq.sql.add('where username='+#39+strings.Values['username']+#39);
        wdm.adq.sql.add('and userpassword='+#39+strings.Values['password']+#39);
        wdm.adq.sql.add('insert usertbl (userphone) valuse ('+#39+sqlstr+#39+')');
        wdm.adq.sql.add(sqlstr);
        wdm.adq.sql.add('insert usertbl (userphone) values ('+#39+sqlstr+#39+')');
        wdm.ADQ.open; }
         if k>0 then
           begin
            userid:=strings.Values['username'];
            userItem:=webUserList.UserItems.add as TWebUserItem;
            UserItem.UserName:=strings.Values['username'];
            UserItem.Password:=strings.Values['password'];
            UserItem.AccessRights:=wdm.ADOSp.FieldValues['usercat'];
            Session.Values['name']:=wdm.ADOSp.FieldValues['username'];
            Session.Values['city']:=wdm.ADOSp.FieldValues['City'];
            handled:=true;
          end
        else handled:=false;
    end;