zoukankan      html  css  js  c++  java
  • uniGUI免登录的实现

    一般情况下,uniGUI项目总要有个登录窗口,客户端登录时,显示这个窗口。现在我想把这个应用嵌套到app中,由于app已经被用户登录,在这种情况下,如果再弹出登录窗口,要用户输入信息,是不合理的。那我该怎么办呢?

    在朋友们的帮助下,实现了用户免登录,实现思路,就是在访问uniGUI的url中加入登录信息,然后在uniGUI应用中取得登录信息,完成登录动作。具体实现方法:

    1.在访问uniGUI的url中加入用户免与密码参数:

    http://192.168.8.8:8077/m?userid=2222&pw=3333

    2.然后,接管uniMainDataModule.OnBeforeLogin事件:

    var
       userid, pw: string;
    begin
      //如果url中传来userid则自动登录,适应在app中调用,不弹出登录窗口.
      if uniGUIApplication.UniApplication.Parameters.IndexOfName('userid') <> -1 then
      begin
        userid := uniGUIApplication.UniApplication.Parameters.Values['userid'];
        pw := uniGUIApplication.UniApplication.Parameters.Values['pw'];
        CurrentUser.ValidateUser(userid, pw);
        if UniMainModule.CurrentUser.LoginStatus = TLoginStatus.lsLogined then
        begin
          UniMainModule.CurrentUser.Login('Web');
          Handled := True; //不弹出登录窗口
        end
      end;
    end;

    看上面的代码,首先从访问的url中取得登录参数 userid,及pw,注意,这里要加uniGUIApplication单元名称,不加的话,uniMainDatamodule也有个属性叫UniApplication,会与uniGUIApplication.UniApplication冲突,这不是一个对象,我在这里犯了点卡。

    接着就是实现登录逻辑,如果用户验证成功,将事件参数Handled设置为True,表示完成登录,不再需要弹出登录窗口。

    现在用带用户登录信息的url访问uniGUI应用,就直接显示主窗口,完成自动登录。

    另外,举一反三,利用这个OnBeforeLogin事件,还可以解决F5刷新浏览器时的自动登录,用户登录后将用户名与密码保存到Cookie中,然后象上面的代码一样,读出来实现登录。具体的代码就不写了。

    3.在自己的app中,根据当前用户信息,生成带用户名与密码的url,用浏览器访问uniGUI,完美集成。这里就不提供参考代码。

    最后要说的是,在普通的uniGUI的web应用中,填加手机端的Login与MainForm,uniGUI会自动识别访问的平台,如果是手机访问,则自动显示手机端的登录窗口与主窗口,这很好的支持了一个uniGUI应用自动支持web访问与手机访问。

    为了方便调试,我们可以在Chrome浏览器中模拟手机访问,具体操作:按crtl+shift+i,切换到开发者模式,然后点击标记的按钮,就变成手机了:

  • 相关阅读:
    任务安排(代价提前付)
    10 01模拟赛订正
    哈希hash
    初学期望
    P1251 递推专练3
    P1229-神秘岛
    P1228-重叠的图像
    白银莲花池
    求强连通分量
    割边
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/13655657.html
Copyright © 2011-2022 走看看