工作灯:挑战处理程序未按预期工作

时间:2013-05-14 15:42:59

标签: session authentication timeout ibm-mobilefirst

我使用了基于表单的身份验证模块附带的示例质询处理程序。我按照我的要求修改了它。在我的应用程序中,我有一个登陆(主页)页面,其中我链接到登录页面。现在我希望它在用户点击登录按钮时起作用。 我在这里面临各种问题:

  1. 首次单击“登录”按钮,它会对WL进行身份验证 服务器但是它无法继续执行登录 功能逻辑。
  2. 首次点击后,我必须第二次点击 登录按钮。在第2次登录时点击它执行登录功能 完美。
  3. 当我退出时,要么不是 从服务器删除会话或什么?它只执行注销 功能代码(如下所示)。但是在指定的会话之后再次 超时,它提示第2 /第3次并显示"超时消息"。 虽然用户没有再次进入。他已经退出了。
  4. 目的:我希望App只在用户点击登录按钮时登录,只需点击一下即可。当我退出或超时时,它不应该保持会话活动或显示"会话超时"再次指定时间后的消息&试。

    我的挑战处理程序:

    var aahadAppRealmChallengeHandler = WL.Client.createChallengeHandler("myAppRealm");
    var isLandingPage=false , islogout=false;
    aahadAppRealmChallengeHandler.isCustomResponse = function(response) {
        WL.Logger.debug("I am here >> 1");
        if (!response || response.responseText === null) {  return false;    }
        var indicatorIdx = response.responseText.search('j_security_check');
        if (indicatorIdx >= 0){ WL.Logger.debug("return true "); return true; }  
        else { 
            if(isLandingPage && $.trim($('#fldloginUserID').val()) !="" && $.trim($('#fldloginUserPassword').val()) !="" ) {
                 WL.Logger.debug("WL.Client.isUserAuthenticated()=" + WL.Client.isUserAuthenticated("myAppRealm"));
                 if(WL.Client.isUserAuthenticated("myAppRealm")) {       WL.Logger.debug("return false ");  return false;           }
                 else {  WL.Logger.debug("return true "); return true;          }
             } 
            WL.Logger.debug("return false ");  return false;
        }
    };
    aahadAppRealmChallengeHandler.handleChallenge = function(response) {
         WL.Logger.debug("I am here >> 2");
         var indicatorIdx = response.responseText.search('j_security_check');
         var suc = response.responseText.search('success');
         WL.Logger.debug("I am here >> 3 - indicatorIdx =" + indicatorIdx + " Success =" + suc + "  - isLandingPage=" + isLandingPage +" islogout=" +islogout);
        if (isLandingPage){
                if (suc >= 0 ){
                    WL.Logger.debug("I am here >> 4 - isLandingPage=" + isLandingPage +" suc="+suc);
                    var reqURL = '/j_security_check';           var options = {};
                    options.parameters = {
                        j_username : $.trim($('#fldloginUserID').val().toLowerCase()),
                        j_password : $.trim($('#fldloginUserPassword').val())
                    };
                    options.headers = {};
                    aahadAppRealmChallengeHandler.submitLoginForm(reqURL, options, aahadAppRealmChallengeHandler.submitLoginFormCallback);
                }else {
                    WL.Logger.debug("I am here >> 5");
                    WL.SimpleDialog.show(DialogMessages_en.SessionExpired_Tile, DialogMessages_en.SessionExpired_Description ,
                        [ { text : 'Close', handler : function () {                 
                            if(busyIndicator.isVisible())   
                                busyIndicator.hide();
                             isLandingPage = false; userLogout();islogout=true;
                            $.mobile.changePage("#landingPage" , { transition: "slide"});   
                        } } ]);
                }
        }
         else {
             WL.Logger.debug("I am here >> 6 - isLandingPage=" + isLandingPage +" re-Login Again");
             if(indicatorIdx < 1) {
                    var reqURL = '/j_security_check';       var options = {};
                    options.parameters = {
                        j_username : $.trim($('#fldloginUserID').val().toLowerCase()),
                        j_password : $.trim($('#fldloginUserPassword').val())
                    };
                    options.headers = {};
                    aahadAppRealmChallengeHandler.submitLoginForm(reqURL, options, aahadAppRealmChallengeHandler.submitLoginFormCallback); 
             }
         }
    };
    aahadAppRealmChallengeHandler.submitLoginFormCallback = function(response) {
        var isLoginFormResponse = aahadAppRealmChallengeHandler.isCustomResponse(response);
        if (isLoginFormResponse){  isLandingPage=false; aahadAppRealmChallengeHandler.handleChallenge(response);  } 
        else {isLandingPage=true;  aahadAppRealmChallengeHandler.submitSuccess(); WL.Logger.debug("aahadAppRealmChallengeHandler.submitSuccess()");       }
    };
    $('#logindone').bind('click', function () {
        WL.Logger.debug(" Button Clicked -Before isLandingPage=" +isLandingPage);  
        isLandingPage=true;  
                var reqURL = '/j_security_check';       var options = {};
                options.parameters = {
                    j_username : $.trim($('#fldloginUserID').val().toLowerCase()),
                    j_password : $.trim($('#fldloginUserPassword').val())
                };
                options.headers = {};
                aahadAppRealmChallengeHandler.submitLoginForm(reqURL, options, aahadAppRealmChallengeHandler.submitLoginFormCallback);
                loginAuthenticateUser();        
    });
    

    我的登录功能

    function loginAuthenticateUser() {
         WL.Logger.debug("Calling loginAuthenticateUser()....");
         busyIndicator.show();
         if ($.trim( $("#fldloginUserID").val()) !="" && $.trim( $("#fldloginUserPassword").val()) !="") {
                authenticateLDAPUsers( $.trim( $("#fldloginUserID").val().toLowerCase() ) , $.trim( $("#fldloginUserPassword").val() ));
         }else {
                if(busyIndicator.isVisible())   
                    busyIndicator.hide();
           simpleDialogDemo(DialogMessages_en.LoginFailed_MsgTitle , DialogMessages_en.LoginFailed_MsgDescription);
         }
    }
    

    退出功能

    function userLogout() {
          WL.Logger.debug("Logout....");
          WL.TabBar.setVisible(false);
          WL.Client.logout('myAppRealm', {onSuccess: function(){}  });  
          $.mobile.changePage("#landingPage" , { transition: "slide"});
          var options = {onSuccess: function() {WL.Logger.debug("collection closed");}, onFailure: function() { WL.Logger.debug("collection closing failed"); } };
          WL.JSONStore.closeAll(options);
    }
    

    authenticationConfig.xml(领域)

    <realm loginModule="Strongme" name="myAppRealm">
                <className>com.worklight.core.auth.ext.FormBasedAuthenticator</className>
                <parameter name="login-page" value="login.html" />
            </realm>
    

    Worklight.properties

    serverSessionTimeout=5
    

    请提出任何建议。

    由于

1 个答案:

答案 0 :(得分:2)

如果是FormBasedAuthentication,您需要在实际提交凭据之前触发身份验证。因此,您需要在应用程序中调用WL.Client.login(“realm-name”)。

如果在应用启动时立即需要身份验证 - 请在wlEnvInit或wlCommonInit函数中调用WL.Client.login(..)。如果需要在以后的阶段 - 请在需要时调用它。