成功执行 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=true
或false
时自动调用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脚本(逻辑与&&逻辑或||分号;) 成功后执行命令失败后执行命令连续执行命令(无论前者成功与否)