Выход из системы Worklight не очищает активного пользователя
Я использую 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."`
По следующему такому вопросу:Worklight: WL.Server.setActiveUser - невозможно изменить - недопустимое состояние: невозможно изменить удостоверение
Сначала я должен очистить активного пользователя перед установкой нового:
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?