2015-09-07 32 views
1

在適配器(getMyRecords)中調用受保護的過程並且服務器會話過期時,應用程序將重新登錄以獲取新的會話,但它不會再次調用getMyRecords如何在會話過期後重新調用適配器過程?

下面是一個示例代碼:

適配器XML文件

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

challengeHandler 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它不會發出原始請求,但調用無限自動登錄過程。

+0

請提供'handleRelogin'功能的實現。 –

+0

我編輯了我的問題,添加了handleRelogin函數實現。 –

+0

請參閱下面的答案。我沒有看到對'submitSuccess'的任何引用。另外你的代碼似乎使用Promises,但是我沒有看到'def'被定義或使用的地方。 –

回答

0

確保每次調用handleChallenge時,調用submitSuccesssubmitFailure

在您打電話給其中一方之前,框架並不知道您已完成回答問題。永遠不要留下任何挑戰。

而且我認爲不是:

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

你應該嘗試

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

相關問題