【发布时间】: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()。
【问题讨论】:
标签: authentication ibm-mobilefirst