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 ;
}
};