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,切換到開發者模式,然后點擊標記的按鈕,就變成手機了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM