Session 会话过期后如何重新调用适配器过程?

Session 会话过期后如何重新调用适配器过程?,session,ibm-mobilefirst,mobilefirst-adapters,Session,Ibm Mobilefirst,Mobilefirst Adapters,在适配器(getMyRecords)中调用受保护的过程并且服务器会话已过期时,应用程序重新登录以获取新会话,但不会再次调用getMyRecords 下面是一个示例代码: 适配器XML文件 <procedure name="getMyRecords" securityTest="appSecurityTest" /> challengeHandler.isCustomResponse = function(response) { if (!response |

在适配器(
getMyRecords
)中调用受保护的过程并且服务器会话已过期时,应用程序重新登录以获取新会话,但不会再次调用
getMyRecords

下面是一个示例代码:

适配器XML文件

<procedure name="getMyRecords" securityTest="appSecurityTest" />
    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;
        }
    };
之后,将执行以下代码(处理质询):


问题是调用SubmitAccess时,它不会发出原始请求,而是无限调用autoLogin过程。

确保每次调用
handleChallenge
时,都会调用
SubmitAccess
submitFailure

在您调用其中一个之前,框架不知道您已经完成了对挑战的回答。永远不要让挑战没有答案

此外,我认为:

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

你应该试试


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

确保每次调用
handleChallenge
时,都会调用
SubmitAccess
submitFailure

在您呼叫其中一个之前,框架不知道您已经完成了对挑战的应答。永远不要让挑战没有应答

此外,我认为:

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

你应该试试


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

请提供该
handlerogin
函数的实现。我已经编辑了我的问题,添加了handlerogin函数实现。请参阅下面的答案。我没有看到任何关于
提交成功的参考。另外,您的代码似乎在使用承诺,但我看不到
def
的定义或使用位置。请支持查看该
handlerogin
函数的实现。我编辑了我的问题,添加了handlerogin函数实现。请参阅下面的答案。我没有看到任何关于
submitSuccess
的参考。此外,您的代码似乎在使用承诺,但我没有看到定义或使用
def
的地方。
    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 ;
        }

    };