1

我試圖讓使用IBM工作燈工作室6.2.0.01工作燈LDAP身份驗證註銷從LDAPRealm

登錄系統工作正常,那部分沒有問題的LDAP認證系統,但註銷功能實際上並不註銷用戶!

領域:

<realm loginModule="LDAPLoginModule" name="LDAPRealm"> 
    <className>com.worklight.core.auth.ext.FormBasedAuthenticator</className> 
</realm> 

的LoginModule:

<loginModule name="LDAPLoginModule"> 
    <className>com.worklight.core.auth.ext.LdapLoginModule</className> 
    <parameter name="ldapProviderUrl" value="<Correct LDAP URL (For security left blank on stackoverflow)>"/> 
    <parameter name="ldapTimeoutMs" value="2000"/> 
    <parameter name="ldapSecurityAuthentication" value="simple"/> 
    <parameter name="validationType" value="exists"/> 
    <parameter name="ldapSecurityPrincipalPattern" value="{username}"/> 
</loginModule> 

SecurityTest:

<customSecurityTest name="LDAPSecurityTest"> 
    <test realm="wl_directUpdateRealm" step="1"/> 
    <test isInternalUserID="true" realm="LDAPRealm"/> 
</customSecurityTest> 

AdapterXML(重要部分)

<procedure name="getUsername" securityTest="LDAPSecurityTest" /> 
<procedure name="onLogout" /> 

AdapterJS

function getUsername(){ 
    return {username: ""}; 
} 

function onLogout(){ 
    WL.Server.setActiveUser("LDAPRealm", null); 
} 

的getUsername函數被調用每次應用程序要檢查,如果用戶當前已登錄,它具有比其它任何功能。

的註銷功能(應用端)

$scope.setUsername = function(){ 
    var invocationData = { adapter: "DummyAdapter", procedure: "getUsername"} 
    WL.Client.invokeProcedure(invocationData, { 
     onSuccess: function(result){}, 
     onFailure: function(result){); 
} 

$scope.logout = function(){ 
    WL.Client.logout("LDAPRealm", {onSuccess: $scope.setUsername}); 
} 

結果:這使得應用到登錄頁面被注意到的用戶已註銷,唯一的問題是..它沒有完全註銷用戶。我能做些什麼來使用戶完全註銷?

PS:爲什麼WL.Client.logout()之後不使用WL.Client.reloadApp?原因有兩個:

  1. 白屏和重新加載整個應用程序只是骯髒的,它根本不是用戶友好的。
  2. WL.Client.reloadApp在Android Lollipop(Android 5.0)上給出致命信號11(代碼1)。至少,這是我的工作燈版本(6.2.0.01)。

,有沒有方法可以讓我避免WL.Client.reloadApp,仍然註銷​​來自服務器的用戶?如果不是:什麼可能會導致Android Lollipop中的致命信號11(代碼1)錯誤?我已經在iOS 8.0,Android 2.3.5,Android 4.4.2和Android 5.0上進行了徹底測試。只有一個失敗是5.0

謝謝你,對不起,長期職位

+0

嗨。儘管我沒有爲您解決問題,但我確實想讓您知道,WL.Client.reloadApp在Android 5.0中不起作用的錯誤正在調查中。感謝您的報告。 – 2014-11-04 07:18:56

+0

我已經找到了我的應用程序的解決方法,這涉及到根本不必使用WL.Client.reloadApp()。我也測試了WL.Client.reloadApp沒有任何別的..我的意思是:沒有AngularJS,沒有離子,沒有任何。只有純CSS的HTML和JavaScript。它仍然只在android 5.0 – ErikBrandsma 2014-11-05 10:14:39

+0

崩潰謝謝。您能否將您的解決方案作爲其他人從中受益的答案? – 2014-11-05 10:20:05

回答

1

我已經從註銷的onSuccess取出WL.Client.reloadApp功能解決了這一問題,我這樣做是這樣的:

$scope.logout = function(){ 
     WL.Client.logout("LDAPRealm", {onSuccess: function(){ 
      $scope.setUsername() // <-- this function is the secret function 
           //  that triggers the securitytest 
           //  which then gives back the login page because 
           //  you had just logged out :) 
     }}); 
} 

至於沒有註銷用戶的適配器:這個評論是錯誤的,這個錯誤是由另一個問題引起的。所以我發佈在StackOverflow上的代碼很好。但仍:

Android 5.0和WL.Client。reloadApp不好(2014年11月5日,以防更新修復此問題)

+0

編輯:即使WL.Client.reloadApp可以工作,我仍然會喜歡這一個,因爲這個解決方案不會給用戶一個閃爍的屏幕。哪個更方便用戶 – ErikBrandsma 2014-11-05 12:13:45