1
在適配器(getMyRecords
)中調用受保護的過程並且服務器會話過期時,應用程序將重新登錄以獲取新的會話,但它不會再次調用getMyRecords
。如何在會話過期後重新調用適配器過程?
下面是一個示例代碼:
適配器XML文件
<procedure name="getMyRecords" securityTest="appSecurityTest" />
challengeHandler JS文件
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;
}
};
之後,這將執行以下代碼(手柄挑戰):
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 ;
}
};
問題是,當調用submitSuccess它不會發出原始請求,但調用無限自動登錄過程。
請提供'handleRelogin'功能的實現。 –
我編輯了我的問題,添加了handleRelogin函數實現。 –
請參閱下面的答案。我沒有看到對'submitSuccess'的任何引用。另外你的代碼似乎使用Promises,但是我沒有看到'def'被定義或使用的地方。 –