Challenge не обрабатывает вызов с аутентификацией на основе адаптера

Я пытался разработать аутентификацию на основе адаптера для приложения, и я не совсем уверен, почему здесь не срабатывает обработчик вызовов.

main.js на стороне клиента:

var AuthenticationHandler = WL.Client.createChallengeHandler("EventAuthRealm");

AuthenticationHandler.isCustomResponse = function(response) {
  if (!response || !response.responseJSON || response.responseText === null) {
    return false;
  }
  if (typeof(response.responseJSON.authStatus) !== 'undefined') {
    return true;
  } else {
    return false;
  }
};

AuthenticationHandler.handleChallenge = function(response) {
  var authRequired = response.responseJSON.authRequired;

  if (authRequired == false) {

    WL.logger.debug("done");
    busyIndicator.hide();
    AuthenticationHandler.submitSuccess();
    toEventList(); //function to navigate to next page


  } else if (authRequired == true) {

    WL.logger.debug("false");
    busyIndicator.hide();
    AuthenticationHandler.submitFailure();
    WL.Logger.debug(response.responseJSON.errorMessage);
  }
};

Функция входа:

function login() {

  var reg = $("#attendeeId").val();
  var userpw = $("#attendeePw").val();

  busyIndicator.show();
  var invocationData = {
    adapter: "eventdbAdapter",
    procedure: "submitAuthentication",
    parameters: [reg, userpw]
  };

  AuthenticationHandler.submitAdapterAuthentication(invocationData, {});

};

HTML-код страницы входа:

<div data-role="page" id="eventloginpage">
  <div data-role="header" align="center" data-theme="b">Event app</div>

  <div data-role="content" style="padding: 15px" id="wat">
    <input type="text" name="attId" id="attendeeId" placeholder="Attendee ID">
    <input type="password" name="password" id="attendeePw" placeholder="Attendee Password">

    <!-- Buttons here -->
    <a href="#" data-role="button" id="loginButton" data-theme="b" onclick="login();">Login</a>
    <a href="#" data-role="button" id="button" onclick="logout();">Logout for now</a>
  </div>

  <div data-role="footer" align="center">Text</div>
</div>

Если это может быть связано, я создал многостраничный компонент приложения, следуя руководству, в котором используется изменение контейнера страниц.

Пример:

function toEventList() {
  $(':mobile-pagecontainer').pagecontainer('change', 'eventpage.html');
}

Всякий раз, когда я выполняю функцию входа в систему, все работает по назначению до тех пор, пока не будет вызвана submitAdapterAuthentication.

Консоль Google Dev возвращает тайм-аут по запросу. При выполнении приложения на Android-устройстве Logcat отображает код состояния 201. Я могу только предположить, что объект успешно создан с использованием информации, собранной из полей, однако обработчик вообще не отправляет учетные данные.

Мы будем очень признательны за любые советы. Заранее извиняюсь, если мой пост покажется глупым, так как у меня нет достаточного опыта работы с MobileFirst и веб-технологиями в целом.


person Willarch    schedule 22.03.2016    source источник
comment
код состояния 201 означает. Формат объекта определяется типом носителя, указанным в поле заголовка Content-Type. Исходный сервер ДОЛЖЕН создать ресурс перед возвратом кода состояния 201. С другой стороны. Код состояния 201 указывает на то, что запрос был выполнен успешно и в результате был создан ресурс (например, новая страница).   -  person Nazmul Hasan    schedule 24.03.2016
comment
поэтому, пожалуйста, поделитесь своим кодом адаптера или соответствующей документацией developer.ibm.com/mobilefirstplatform/documentation/   -  person Nazmul Hasan    schedule 24.03.2016
comment
Спасибо за ответ Хасан. Я добавил код для файлов js и xml адаптера по следующей ссылке: jsfiddle.net/srvc0pk7   -  person Willarch    schedule 24.03.2016


Ответы (2)


Было бы полезно узнать, с какой версией МФУ вы работаете, чтобы иметь возможность ознакомиться с соответствующей документацией.

Убедитесь, что в wlCommonInit() реализовано следующее. Как видно из приведенной здесь документации, Документация, необходимо связаться с сервером worklight

WL.Client.connect({ onSuccess: onConnectSuccess, onFailure: onConnectFailure});

person Spindoctor    schedule 22.03.2016
comment
Спасибо, что указали на это, и извините, что не включили это в начале. Я использую МФУ 7.1.0. Мне действительно не хватало connect() из wlCOmmonInit(). Никаких изменений с консолью браузера. На моем устройстве Android я получаю сообщение FWLSE0335E: Ошибка авторизации Идентификатор клиента не найден на сервере. - person Willarch; 22.03.2016
comment
пожалуйста, очистите кэш файлов cookie для веб-браузера, закройте его и повторите попытку. - person Spindoctor; 22.03.2016
comment
Все такой же. Я несколько раз замечал это как потенциальное решение при поиске, но, похоже, это не сработало. - person Willarch; 22.03.2016
comment
можете опубликовать файл main.js, чтобы я мог посмотреть? - person Spindoctor; 22.03.2016
comment
Да, пожалуйста. Тем временем я попробовал несколько новых вещей, и некоторые из методов немного отличаются от моего первоначального поста. Ссылка JSFiddle: jsfiddle.net/xvo0pvve - person Willarch; 22.03.2016
comment
Вы можете сделать это глобальным? var AuthenticationHandler , то есть вне wlCommonInit(), а затем посмотрите, изменит ли это вывод консоли? - person Spindoctor; 23.03.2016

Я понял, почему это не работало должным образом раньше. На стороне адаптера я не использовал операторы строгого равенства для тестовых значений входа в систему submitAuthentication(), как показано в примере. Я предполагал, что другие типы операторов равенства будут работать, однако, похоже, это не так. Насколько я могу судить, это не написано ни в одной документации.

Ошибка 401, о которой я упоминал ранее, похоже, является проверкой сервером MobileFirst одного из встроенных компонентов в соответствии с документацией.

Я также обязательно почистил сервер и повторно развернул на нем приложение.

person Willarch    schedule 28.03.2016