我正在尝试使用IBM Worklight Studio 6.2.0.01创建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函数,除此之外它没有任何功能。
退出功能(App端)
$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?有两个原因:
请,有没有办法可以避免WL.Client.reloadApp并仍然从服务器注销用户?如果不是:什么可能导致Android Lollipop中的致命信号11(代码1)错误?我已经在iOS 8.0,Android 2.3.5,Android 4.4.2和Android 5.0上进行了彻底的测试。只有一个失败的是5.0
谢谢你,很抱歉这篇长篇文章
答案 0 :(得分:1)
我通过从logout 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 :)
}});
}
对于未注销用户的适配器:此注释为false,此错误源于另一个问题。所以我在StackOverflow上发布的代码很好。但仍然:
Android 5.0和WL.Client.reloadApp 不顺利(2014年11月5日,如果更新修复此问题)