Проверка сеанса перед выполнением вызовов oData — облачный портал HANA

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

В документации HANA Cloud приведен следующий код:

jQuery(document).ajaxComplete(function(e, jqXHR) {
  if (jqXHR.getResponseHeader("com.sap.cloud.security.login")) {
    alert("Session is expired, page shall be reloaded.");
    jQuery.sap.delayedCall(0, this, function() {
      location.reload(true);
    });
  }
});

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


person Deepak    schedule 12.01.2017    source источник


Ответы (1)


Вы можете проверить в функции обратного вызова успеха значение заголовка HTTP-ответа "com.sap.cloud.security.login":

  sap.ui.getCore().getModel().read("/SOME_ENTITYSet", {

     success: function(odata, response) {
       if (response.headers["com.sap.cloud.security.login"] === "login-request") {
          // Timeout handling
       } else {  
          // Process data in argument odata  
       }
     },

     error: function(error) {
       if (response.headers["com.sap.cloud.security.login"] === "login-request") {
          // Timeout handling
       } else {  
          // Show error message (for non-timeout errors)
       }         
     }
  });  

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

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

person user1364368    schedule 12.06.2017