Worklight注销不会清除活动用户

时间:2014-05-15 11:26:42

标签: ibm-mobilefirst worklight-adapters worklight-server

我正在使用Worklight 6.1并使用challange处理程序来确定我的用户是否已登录。

登录后,我的应用程序中的注销按钮附加了以下代码:

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 - Cann'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);

导致我的应用的登录/退出请求的infenite循环。

我的问题:

  1. 我/我应该在哪里清除我的活跃用户?
  2. 使用challange处理程序时,是否允许使用WL.Client.logout方法?

1 个答案:

答案 0 :(得分:1)

  1. 您的领域应该有一个注销功能,该功能应指向适用于注销的过程。您可以将其添加为领域的参数。
  2. 您可以将WL.Server.setActiveUser("AdapterAuthRealm",null);添加到适配器

    中的onLogout()过程
    <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是的。您可以使用WL.Client.Logout();`使用质询处理程序时

相关问题