成功执行 isCustomResponse() 后未调用 handleChallenge()

Posted

技术标签:

【中文标题】成功执行 isCustomResponse() 后未调用 handleChallenge()【英文标题】:handleChallenge() is not getting called after successful execution of isCustomResponse() 【发布时间】:2015-09-20 18:26:07 【问题描述】:

我正在使用带有 AngularJS 和 Ionic 的 IBM MobileFirst Platform Foundation 应用程序 7.0 开发一个应用程序。对于身份验证,我使用基于适配器的身份验证。

我有一个保护应用程序和所有程序的领域。我已经定义了一个登录控制器和一个 LoginChallengeHandler 服务来处理与身份验证相关的活动:

我基于以下几点:https://medium.com/@papasimons/worklight-authentication-done-right-with-angularjs-768aa933329c

当我登录应用程序时,通过以下步骤进行身份验证工作正常

第 1 步: 拨打ch.submitAdapterAuthentication(options, ch.submitLoginCallback);

第 2 步: 成功调用适配器后,将调用以下内容

ch.submitLoginCallback = function(response) 
            console.log("submitLoginCallback.response ",response);
            var isLoginFormResponse = ch.isCustomResponse(response);
            console.log("submitLoginCallback.isLoginFormResponse ",isLoginFormResponse);
            if (isLoginFormResponse)
                console.log("submitLoginCallback.calling  ");
                ch.handleChallenge(response);
             
        ;

第 3 步:ch.isCustomResponse = function(response) 被调用,返回 true 或 false。

ch.isCustomResponse = function(response)
            console.log("isCustomResponse.responseJSON ",response);
            //alert("response")
            if (!response || !response.responseJSON || response.responseText === null) 
                return false;

            

            console.log("isCustomResponse.response.responseJSON ",response.responseJSON);
            console.log(typeof(response.responseJSON.authRequired) !== 'undefined');
            if (typeof(response.responseJSON.authRequired) !== 'undefined')
                //ch.handleChallenge(response);
                return true;
             else 
                return false;
            
        ;

Step4:ch.handleChallenge = function(response)被调用,我们将在其中处理usr认证的成功或失败。

问题是,当身份验证失败或服务器会话注销或服务器会话超时时,在服务器适配器端调用 onAuthRequired 方法 returnsauthRequired=true

function onAuthRequired(headers, errorMessage)
    return 
        authRequired: true,
        errorMessage: errorMessage
    ;

在客户端,ch.isCustomResponse = function(response) 被调用,但之后不会调用ch.handleChallenge = function(response)。执行在ch.isCustomResponse 函数处终止,ch.handleChallenge 不会自动调用。如果我这样手动调用

if (typeof(response.responseJSON.authRequired) !== 'undefined')
                //ch.handleChallenge(response);
                return true;
             else 
                return false;
            

在登录时,ch.handleChallenge() 被执行两次

谁能告诉我如何解决这个问题?如何在ch.isCustomResponse() 返回authRequired=truefalse 时自动调用ch.handleChallenge()

【问题讨论】:

【参考方案1】:

当身份验证失败或服务器会话注销或服务器会话超时时

首先,您需要在登录页面(用户提供凭据并按登录)上获取用户,或者如果您通过代码登录,那么您需要调用它

ch.submitAdapterAuthentication(options, ch.submitLoginCallback);

【讨论】:

谢谢,目前我也在做同样的事情,但我的问题是在适配器成功执行后,ch.isCustomResponse() 会自动调用响应 authRequired: true, errorMessage: null,但是ch.handleChallenge() 函数不会自动调用。如果我从 ch.isCustomResponse() 手动调用 ch.handleChallenge() 函数,则在执行 ch.submitAdapterAuthentication(options, ch.submitLoginCallback) 时,调用 ch.handleChallenge() 函数两次。请给你建议和建议来解决这个问题。 Worklight 必须在 isCustomResponse 返回 YES 值时调用 handleChallenge 方法。 www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/… 尝试从 isCustomResponse 重新运行“YES”。我没有工作代码。

以上是关于成功执行 isCustomResponse() 后未调用 handleChallenge()的主要内容,如果未能解决你的问题,请参考以下文章

IsCustomResponse 在基于适配器的身份验证中始终返回 false

shell脚本(逻辑与&&逻辑或||分号;) 成功后执行命令失败后执行命令连续执行命令(无论前者成功与否)

支付宝链式支付成功后执行任务

解析后保存云函数返回成功结果但不执行成功函数

仅在 useMutation 成功执行后如何使用 apolloClient 的“onSuccess”

成功执行后,我的 nodejs 脚本不会自行退出