我正在使用Worklight 6.1,并使用挑战处理程序来确定我的用户是否已登录。
一旦登录,我有以下代码附加到我的注销按钮在我的应用程序:
on(logoutBtn, "click", lang.hitch(this, function() {
WL.Client.logout('AdapterAuthRealm', { onSuccess:lang.hitch(this, function() {
this.gotoView("login");
}), onFailure:lang.hitch(this, function() {
WL.Logger.error("Unable to logout");
})});
return false;
}));
单击它将打开登录视图,但是当用户试图再次登录时,显示以下错误:
"Cannot change identity of an already logged in user in realm 'AdapterAuthRealm'.
The application must logout first."`
根据以下SO问题:Worklight: WL.Server.setActiveUser - can 't modify - Illegal State: Cannot change identity
在设置新用户之前,我必须先清除当前用户:
WL.Server.setActiveUser("AdapterAuthRealm", null);
我实际上希望WL.Client.logout自动执行此操作,但我自己在适配器的onLogout函数中这样做似乎没有任何效果:
<realm loginModule="NonValidatingLoginModule" name="AdapterAuthRealm">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="PortalAdapter.onAuthRequired"/>
<parameter name="logout-function" value="PortalAdapter.onLogout"/>
</realm>
和
function onLogout() {
WL.Logger.info("invoke logout request");
WL.Server.setActiveUser("AdapterAuthRealm", null);
var input = {
method : 'get',
returnedContentType : 'text/plain',
path : '/logoutUrl'
};
WL.Server.invokeHttp(input);
}
将其添加到适配器的登录功能中,如下所示:
var userIdentity = { userId: username, displayName: username, attributes: {}};
WL.Server.setActiveUser("AdapterAuthRealm", null);
WL.Server.setActiveUser("AdapterAuthRealm", userIdentity);
导致我的应用程序的登录/注销请求的无限循环。
我的问题:
- 我应该何时/在哪里清除我的活跃用户?
- 当使用挑战处理程序时,是否允许使用WL.Client.logout方法?
- 您的领域应该有一个注销函数,它应该指向用于注销的适配器过程。您可以将其作为realm的参数添加。
您可以将WL.Server.setActiveUser("AdapterAuthRealm",null);
添加到适配器
<realm loginModule="loginModule" name="AdapterAuthRealm">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="LoginAdapter.onAuthRequired"/>
<parameter name="logout-function" value="LoginAdapter.onLogout"/>
</realm>
2是的。当使用挑战处理程序