Как повторно вызвать процедуру адаптера после истечения сеанса?

При вызове защищенной процедуры в адаптере (getMyRecords) и истечении сеанса сервера приложение повторно входит в систему, чтобы получить новый сеанс, но больше не вызывает getMyRecords.

Ниже приведен пример кода:

XML-файл адаптера

<procedure name="getMyRecords" securityTest="appSecurityTest" />

JS-файл обработчика вызовов

    challengeHandler.isCustomResponse = function(response) {
        if (!response || !response.responseJSON || response.responseText === null) {
            return false;
        }
        if (typeof (response.responseJSON.authRequired) !== 'undefined') {
            //Should enter automatically to handleChallenge but not always
            return true;
        } else {
            return false;
        }
    };

После этого будет выполнен приведенный ниже код (вызов обработки):

    challengeHandler.handleChallenge = function(response) {

        var hasGlobalHeader = (WL.Client.__getGlobalHeaders()['ENC-USER'] != undefined);

        if(hasGlobalHeader ){ //Re-login response

       //this will invoke the relogin procedure to get a new session and to authenticate the user

            challengeHandler.handleRelogin(response);                           
        }else{
            ...
        }

    };

    challengeHandler.handleRelogin = function(response){
        var authRequired = response.responseJSON.authRequired;
        if (authRequired == true) {
              var input = {
                        adapter: "AuthenticationAdapter",
                        procedure: "autoLogin",
                        parameters: [localStorage.getItem('encryptedUser'), lang]
                    };               

              WL.Client.invokeProcedure(input, {
                    onSuccess: function(response){
                        $logger.log('service :: autoLoginSuccess :: response : ', response);
                        def.resolve(response); 
                    }, 
                    onFailure: function(err){
                        $logger.log('service :: autoLoginFailure :: err : ', err);
                        def.reject(err); 
                    }
               }); 
        }else{              
            //InitContext
            initContext(response);
            goHome();               
            //challengeHandler.activeRequest = null ;
        }

    };

Проблема в том, что при вызове submitSuccess он не выдает исходный запрос, а бесконечно вызывает процедуру autoLogin.


person Dali Grissa    schedule 07.09.2015    source источник
comment
Предоставьте реализацию этой функции handleRelogin.   -  person Nathan H    schedule 08.09.2015
comment
Я отредактировал свой вопрос, добавив реализацию функции handleRelogin.   -  person Dali Grissa    schedule 08.09.2015
comment
Смотрите мой ответ ниже. Я не вижу никакой ссылки на submitSuccess. Также ваш код, похоже, использует Promises, но я не вижу, где определяется или используется def.   -  person Nathan H    schedule 09.09.2015


Ответы (1)


Убедитесь, что при каждом вызове handleChallenge вызывается либо submitSuccess, либо submitFailure.

Пока вы не позвоните тому или иному, фреймворк не знает, что вы закончили отвечать на вызов. Никогда не оставляйте вызов без ответа.

Также я думаю, что вместо:

if (typeof (response.responseJSON.authRequired) !== 'undefined') {

Тебе стоит попробовать

if (typeof (response.responseJSON.authRequired) !== 'undefined' && response.responseJSON.authRequired == true) {

person Nathan H    schedule 08.09.2015